diff options
| author | Weicao-CatilGrass <1992414357@qq.com> | 2025-06-16 07:59:24 +0800 |
|---|---|---|
| committer | Weicao-CatilGrass <1992414357@qq.com> | 2025-06-16 07:59:24 +0800 |
| commit | 37f6816105f165610eca06432b798f99f9d4325a (patch) | |
| tree | 2fb07c768704b3ff82ed613bf7b3555279cec1ca | |
| parent | c25fde2c2c0b01d9b129e776cb7dd474090f7303 (diff) | |
Fixing...
| -rw-r--r-- | core/bindings/lang/clang/src/data/ngpd_controller.rs | 13 | ||||
| -rw-r--r-- | core/bindings/lang/clang/src/data/ngpd_game.rs | 8 | ||||
| -rw-r--r-- | core/bindings/lang/clang/src/service/ngpd_tcp_service.rs | 7 |
3 files changed, 17 insertions, 11 deletions
diff --git a/core/bindings/lang/clang/src/data/ngpd_controller.rs b/core/bindings/lang/clang/src/data/ngpd_controller.rs index 95d81cb..d7f7b96 100644 --- a/core/bindings/lang/clang/src/data/ngpd_controller.rs +++ b/core/bindings/lang/clang/src/data/ngpd_controller.rs @@ -60,11 +60,10 @@ impl FfiControllerData { // Take ownership let controller_box = unsafe { Box::from_raw(controller) }; - let raw_data = (*controller_box).0; + let raw_data = controller_box.0; // Convert ControllerData - let controller_data = unsafe { Box::from_raw(raw_data as *mut ControllerData) }; - let runtime = controller_data.runtime(); + let controller_data: Box<ControllerData> = unsafe { Box::from_raw(raw_data as *mut ControllerData) }; // Define custom drop function extern "C" fn drop_runtime(raw: *mut c_void) { @@ -75,7 +74,7 @@ impl FfiControllerData { } // Convert to an FFI-safe structure - let arc_raw = Arc::into_raw(runtime.clone()) as *mut c_void; + let arc_raw = Arc::into_raw(controller_data.runtime()) as *mut c_void; Box::into_raw(Box::new(FfiControllerRuntime { inner: arc_raw, @@ -136,7 +135,11 @@ impl FfiControllerRuntime { let arc_ptr = unsafe { (*runtime).inner as *const Arc<Mutex<ControllerRuntime>> }; let arc_ref = unsafe { Arc::from_raw(arc_ptr) }; - let msg = unsafe { ControlMessage::from(control_message.read()) }; + + let msg = unsafe { + let boxed_msg = Box::from_raw(control_message); + ControlMessage::from(*boxed_msg) + }; entry_mutex!(arc_ref, |mutex_guard| { mutex_guard.send_message(msg); diff --git a/core/bindings/lang/clang/src/data/ngpd_game.rs b/core/bindings/lang/clang/src/data/ngpd_game.rs index b3deb6c..829c5ed 100644 --- a/core/bindings/lang/clang/src/data/ngpd_game.rs +++ b/core/bindings/lang/clang/src/data/ngpd_game.rs @@ -104,10 +104,10 @@ impl FfiGameData { return std::ptr::null_mut(); } - let data_inner = unsafe { &mut *((*data).0 as *mut GameData) }; - let game_data = *unsafe { Box::from_raw(data_inner) }; + let data_inner = unsafe { data.read() }; + let raw_data = data_inner.0; - let runtime = game_data.runtime(); + let game_data: Box<GameData> = unsafe { Box::from_raw(raw_data as *mut GameData) }; extern "C" fn drop_runtime(raw: *mut c_void) { unsafe { @@ -116,7 +116,7 @@ impl FfiGameData { } } - let arc_raw = Arc::into_raw(runtime.clone()) as *mut c_void; + let arc_raw = Arc::into_raw(game_data.runtime()) as *mut c_void; Box::into_raw(Box::new(FfiGameRuntime { inner: arc_raw, diff --git a/core/bindings/lang/clang/src/service/ngpd_tcp_service.rs b/core/bindings/lang/clang/src/service/ngpd_tcp_service.rs index 5c73fc7..2c8995c 100644 --- a/core/bindings/lang/clang/src/service/ngpd_tcp_service.rs +++ b/core/bindings/lang/clang/src/service/ngpd_tcp_service.rs @@ -7,6 +7,7 @@ use nogamepads_core::service::tcp_network::pad_server::pad_server_service::PadSe use std::ffi::{c_char, c_void, CStr}; use std::net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr}; use std::sync::{Arc, Mutex}; +use nogamepads_core::service::tcp_network::utils::tokio_utils::build_tokio_runtime; #[repr(C)] pub struct FfiTcpClientService(*mut c_void); @@ -150,7 +151,8 @@ impl FfiTcpClientService { let inner = unsafe { &mut *((*service).0 as *mut PadClientNetwork) }; let service = unsafe { Box::from_raw(inner) }; - service.connect(); + let rt = build_tokio_runtime("nogamepads-c-tcp".to_string()); + rt.block_on(service.build_entry()); } /// Free tcp client @@ -294,7 +296,8 @@ impl FfiTcpServerService { let inner = unsafe { &mut *((*service).0 as *mut PadServerNetwork) }; let service = unsafe { Box::from_raw(inner) }; - service.listening_block_on(); + let rt = build_tokio_runtime("nogamepads-c-tcp".to_string()); + rt.block_on(service.build_entry()); } /// Free tcp server |
