aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWeicao-CatilGrass <1992414357@qq.com>2025-06-16 07:59:24 +0800
committerWeicao-CatilGrass <1992414357@qq.com>2025-06-16 07:59:24 +0800
commit37f6816105f165610eca06432b798f99f9d4325a (patch)
tree2fb07c768704b3ff82ed613bf7b3555279cec1ca
parentc25fde2c2c0b01d9b129e776cb7dd474090f7303 (diff)
Fixing...
-rw-r--r--core/bindings/lang/clang/src/data/ngpd_controller.rs13
-rw-r--r--core/bindings/lang/clang/src/data/ngpd_game.rs8
-rw-r--r--core/bindings/lang/clang/src/service/ngpd_tcp_service.rs7
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