diff options
| author | 1992414357@qq.com <1992414357@qq.com> | 2025-05-29 14:20:04 +0800 |
|---|---|---|
| committer | 1992414357@qq.com <1992414357@qq.com> | 2025-05-29 14:20:04 +0800 |
| commit | 3d23632d7c6330e0ec98dad53656dfed5f5767b0 (patch) | |
| tree | d8d59726ca5b046b55ba502f1b8d5ba3a561a569 /bindings/c/src/data_c/connection_message_c.rs | |
| parent | 9d3d6d4195e58c51166811d8357a331d53c4cdd4 (diff) | |
1. 优化了服务器的消息处理方式
2. 将c和c#的绑定移动到了./bindings/文件夹
Diffstat (limited to 'bindings/c/src/data_c/connection_message_c.rs')
| -rw-r--r-- | bindings/c/src/data_c/connection_message_c.rs | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/bindings/c/src/data_c/connection_message_c.rs b/bindings/c/src/data_c/connection_message_c.rs new file mode 100644 index 0000000..b3b54d4 --- /dev/null +++ b/bindings/c/src/data_c/connection_message_c.rs @@ -0,0 +1,95 @@ +use crate::data_c::connection_message_c::ConnMsgCTag::{Connection, Ready, RequestLayoutConfigure, RequestProfile, RequestSkinPackage}; +use std::ffi::c_void; +use std::mem::ManuallyDrop; +use std::ptr::null_mut; +use nogamepads_lib_rs::pad_data::pad_messages::nogamepads_messages::ConnectionMessage; +use nogamepads_lib_rs::pad_data::pad_player_info::nogamepads_player_info::PlayerInfo; + +#[repr(C)] +#[allow(unused_imports)] +pub struct ConnectionMessageC { + pub tag: ConnMsgCTag, + pub data: ConnMsgCUnion +} + +#[repr(C)] +#[allow(unused_imports)] +pub enum ConnMsgCTag { + Connection, RequestProfile, RequestLayoutConfigure, RequestSkinPackage, Ready, Err +} + +#[repr(C)] +#[allow(unused_imports)] +pub union ConnMsgCUnion { + nul: *mut c_void, + info: ManuallyDrop<PlayerInfo> +} + +impl From<ConnectionMessageC> for ConnectionMessage { + fn from(mut value: ConnectionMessageC) -> Self { + match value.tag { + Connection => unsafe { + let info = ManuallyDrop::take(&mut value.data.info); + ConnectionMessage::Connection(info) + } + RequestProfile => { + ConnectionMessage::RequestProfile + } + RequestLayoutConfigure => { + ConnectionMessage::RequestLayoutConfigure + } + RequestSkinPackage => { + ConnectionMessage::RequestSkinPackage + } + Ready => { + ConnectionMessage::Ready + } + ConnMsgCTag::Err => { + ConnectionMessage::Err + } + } + } +} + +impl From<ConnectionMessage> for ConnectionMessageC { + fn from(value: ConnectionMessage) -> Self { + match value { + ConnectionMessage::Connection(info) => { + ConnectionMessageC { + tag: Connection, + data: ConnMsgCUnion { info: ManuallyDrop::new(info) } + } + } + ConnectionMessage::RequestProfile => { + ConnectionMessageC { + tag: RequestProfile, + data: ConnMsgCUnion { nul: null_mut() } + } + } + ConnectionMessage::RequestLayoutConfigure => { + ConnectionMessageC { + tag: RequestLayoutConfigure, + data: ConnMsgCUnion { nul: null_mut() } + } + } + ConnectionMessage::RequestSkinPackage => { + ConnectionMessageC { + tag: RequestSkinPackage, + data: ConnMsgCUnion { nul: null_mut() } + } + } + ConnectionMessage::Ready => { + ConnectionMessageC { + tag: Ready, + data: ConnMsgCUnion { nul: null_mut() } + } + } + ConnectionMessage::Err => { + ConnectionMessageC { + tag: ConnMsgCTag::Err, + data: ConnMsgCUnion { nul: null_mut() } + } + } + } + } +}
\ No newline at end of file |
