aboutsummaryrefslogtreecommitdiff
path: root/bindings/c/src/data_c/connection_message_c.rs
diff options
context:
space:
mode:
author1992414357@qq.com <1992414357@qq.com>2025-05-29 14:20:04 +0800
committer1992414357@qq.com <1992414357@qq.com>2025-05-29 14:20:04 +0800
commit3d23632d7c6330e0ec98dad53656dfed5f5767b0 (patch)
treed8d59726ca5b046b55ba502f1b8d5ba3a561a569 /bindings/c/src/data_c/connection_message_c.rs
parent9d3d6d4195e58c51166811d8357a331d53c4cdd4 (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.rs95
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