@@ -3,6 +3,8 @@ use anyhow::Result as AnyResult;
33use serde_json:: { json, Value } ;
44use tokio:: time:: { sleep, Duration } ;
55use tracing:: debug;
6+ use std:: sync:: Arc ;
7+ use tokio:: sync:: Mutex ;
68
79/// Sends a keyboard report with the given modifier and keys.
810pub async fn rpc_keyboard_report (
@@ -236,3 +238,88 @@ pub async fn send_windows_key(client: &crate::jetkvm_rpc_client::JetKvmRpcClient
236238
237239 Ok ( ( ) )
238240}
241+
242+ /// Registers keyboard functions to the provided Lua context.
243+ #[ cfg( feature = "lua" ) ]
244+ use mlua:: prelude:: * ;
245+ #[ cfg( feature = "lua" ) ]
246+ pub fn register_lua ( lua : & Lua , client : Arc < Mutex < JetKvmRpcClient > > ) -> LuaResult < ( ) > {
247+ let send_return_fn = {
248+ let client = client. clone ( ) ;
249+ lua. create_async_function ( move |_, ( ) | {
250+ let client = client. clone ( ) ;
251+ async move {
252+ send_return ( & * client. lock ( ) . await ) . await . map_err ( mlua:: Error :: external)
253+ }
254+ } ) ?
255+ } ;
256+ lua. globals ( ) . set ( "send_return" , send_return_fn) ?;
257+
258+ let send_ctrl_a_fn = {
259+ let client = client. clone ( ) ;
260+ lua. create_async_function ( move |_, ( ) | {
261+ let client = client. clone ( ) ;
262+ async move {
263+ send_ctrl_a ( & * client. lock ( ) . await ) . await . map_err ( mlua:: Error :: external)
264+ }
265+ } ) ?
266+ } ;
267+ lua. globals ( ) . set ( "send_ctrl_a" , send_ctrl_a_fn) ?;
268+
269+ let send_ctrl_v_fn = {
270+ let client = client. clone ( ) ;
271+ lua. create_async_function ( move |_, ( ) | {
272+ let client = client. clone ( ) ;
273+ async move {
274+ send_ctrl_v ( & * client. lock ( ) . await ) . await . map_err ( mlua:: Error :: external)
275+ }
276+ } ) ?
277+ } ;
278+ lua. globals ( ) . set ( "send_ctrl_v" , send_ctrl_v_fn) ?;
279+
280+ let send_ctrl_x_fn = {
281+ let client = client. clone ( ) ;
282+ lua. create_async_function ( move |_, ( ) | {
283+ let client = client. clone ( ) ;
284+ async move {
285+ send_ctrl_x ( & * client. lock ( ) . await ) . await . map_err ( mlua:: Error :: external)
286+ }
287+ } ) ?
288+ } ;
289+ lua. globals ( ) . set ( "send_ctrl_x" , send_ctrl_x_fn) ?;
290+
291+ let send_ctrl_c_fn = {
292+ let client = client. clone ( ) ;
293+ lua. create_async_function ( move |_, ( ) | {
294+ let client = client. clone ( ) ;
295+ async move {
296+ send_ctrl_c ( & * client. lock ( ) . await ) . await . map_err ( mlua:: Error :: external)
297+ }
298+ } ) ?
299+ } ;
300+ lua. globals ( ) . set ( "send_ctrl_c" , send_ctrl_c_fn) ?;
301+
302+ let send_windows_key_fn = {
303+ let client = client. clone ( ) ;
304+ lua. create_async_function ( move |_, ( ) | {
305+ let client = client. clone ( ) ;
306+ async move {
307+ send_windows_key ( & * client. lock ( ) . await ) . await . map_err ( mlua:: Error :: external)
308+ }
309+ } ) ?
310+ } ;
311+ lua. globals ( ) . set ( "send_windows_key" , send_windows_key_fn) ?;
312+
313+ let send_text_fn = {
314+ let client = client. clone ( ) ;
315+ lua. create_async_function ( move |_, text : String | {
316+ let client = client. clone ( ) ;
317+ async move {
318+ rpc_sendtext ( & * client. lock ( ) . await , & text) . await . map_err ( mlua:: Error :: external)
319+ }
320+ } ) ?
321+ } ;
322+ lua. globals ( ) . set ( "send_text" , send_text_fn) ?;
323+
324+ Ok ( ( ) )
325+ }
0 commit comments