diff options
| author | 1992414357@qq.com <1992414357@qq.com> | 2025-05-29 07:55:41 +0800 |
|---|---|---|
| committer | 1992414357@qq.com <1992414357@qq.com> | 2025-05-29 07:55:41 +0800 |
| commit | 9d3d6d4195e58c51166811d8357a331d53c4cdd4 (patch) | |
| tree | 2e1d8abfee06a05b3ded9c6d5cd99574412af665 | |
| parent | 7bf8e1f24f95d87e1a30765b1904473cf75b435b (diff) | |
正在编写 C# 绑定部分
42 files changed, 755 insertions, 222 deletions
diff --git a/.idea/runConfigurations/Release_Project.xml b/.idea/runConfigurations/Release_Project.xml index 8cd901d..b614f1b 100644 --- a/.idea/runConfigurations/Release_Project.xml +++ b/.idea/runConfigurations/Release_Project.xml @@ -14,7 +14,7 @@ <option name="isRedirectInput" value="false" /> <option name="redirectInputPath" value="" /> <method v="2"> - <option name="CARGO.BUILD_TASK_PROVIDER" enabled="true" /> + <option name="RunConfigurationTask" enabled="true" run_configuration_name="Final Build" run_configuration_type="CargoCommandRunConfiguration" /> </method> </configuration> </component>
\ No newline at end of file diff --git a/.idea/runConfigurations/Run_Client_Console.xml b/.idea/runConfigurations/Run_Client_Console.xml new file mode 100644 index 0000000..f0ea024 --- /dev/null +++ b/.idea/runConfigurations/Run_Client_Console.xml @@ -0,0 +1,19 @@ +<component name="ProjectRunConfigurationManager"> + <configuration default="false" name="Run Client Console" type="CargoCommandRunConfiguration" factoryName="Cargo Command"> + <option name="command" value="run --package nogamepads-core --example start_client_console" /> + <option name="workingDirectory" value="file://$PROJECT_DIR$" /> + <envs /> + <option name="emulateTerminal" value="true" /> + <option name="channel" value="DEFAULT" /> + <option name="requiredFeatures" value="true" /> + <option name="allFeatures" value="false" /> + <option name="withSudo" value="false" /> + <option name="buildTarget" value="REMOTE" /> + <option name="backtrace" value="SHORT" /> + <option name="isRedirectInput" value="false" /> + <option name="redirectInputPath" value="" /> + <method v="2"> + <option name="CARGO.BUILD_TASK_PROVIDER" enabled="true" /> + </method> + </configuration> +</component>
\ No newline at end of file diff --git a/.idea/runConfigurations/Run_Server_Console.xml b/.idea/runConfigurations/Run_Server_Console.xml new file mode 100644 index 0000000..14e6f92 --- /dev/null +++ b/.idea/runConfigurations/Run_Server_Console.xml @@ -0,0 +1,19 @@ +<component name="ProjectRunConfigurationManager"> + <configuration default="false" name="Run Server Console" type="CargoCommandRunConfiguration" factoryName="Cargo Command"> + <option name="command" value="run --package nogamepads-core --example start_server_console" /> + <option name="workingDirectory" value="file://$PROJECT_DIR$" /> + <envs /> + <option name="emulateTerminal" value="true" /> + <option name="channel" value="DEFAULT" /> + <option name="requiredFeatures" value="true" /> + <option name="allFeatures" value="false" /> + <option name="withSudo" value="false" /> + <option name="buildTarget" value="REMOTE" /> + <option name="backtrace" value="SHORT" /> + <option name="isRedirectInput" value="false" /> + <option name="redirectInputPath" value="" /> + <method v="2"> + <option name="CARGO.BUILD_TASK_PROVIDER" enabled="true" /> + </method> + </configuration> +</component>
\ No newline at end of file diff --git a/core/src/pad_service/client.rs b/core/src/pad_service/client.rs index be7784d..c0b8282 100644 --- a/core/src/pad_service/client.rs +++ b/core/src/pad_service/client.rs @@ -92,8 +92,9 @@ pub mod nogamepads_client { } } - pub fn enable_console(&mut self) { + pub fn enable_console(&mut self) -> &mut PadClient { self.enable_console = true; + self } pub fn quiet(&mut self) -> &mut PadClient { @@ -101,8 +102,27 @@ pub mod nogamepads_client { self } - pub fn bind_player(&mut self, player: PlayerInfo) { + pub fn bind_player(&mut self, player: PlayerInfo) -> &mut PadClient { self.bind_player = player; + self + } + + pub fn clone_addr(&self) -> (IpAddr, u16) { + (self.target_address, self.target_port) + } + + pub fn is_quiet(&self) -> bool { + self.quiet + } + + pub fn is_enable_console(&self) -> bool { + self.enable_console + } + + pub fn unbind_player(&mut self) -> PlayerInfo { + let player = self.bind_player.clone(); + self.bind_player = PlayerInfo::new(); + player } } diff --git a/core_c/src/data_c/connection_callback_message_c.rs b/core_c/src/data_c/connection_callback_message_c.rs index bb96a0d..e23b6f6 100644 --- a/core_c/src/data_c/connection_callback_message_c.rs +++ b/core_c/src/data_c/connection_callback_message_c.rs @@ -1,12 +1,12 @@ +use crate::data_c::game_profile_c::GameProfileC; +use nogamepads_lib_rs::pad_data::pad_messages::nogamepads_messages::{ConnectionCallbackMessage, ConnectionErrorType}; use std::ffi::c_void; use std::mem::ManuallyDrop; use std::ptr::null_mut; -use nogamepads_lib_rs::pad_data::game_profile::game_profile::GameProfile; -use nogamepads_lib_rs::pad_data::pad_messages::nogamepads_messages::{ConnectionCallbackMessage, ConnectionErrorType}; #[repr(C)] #[allow(unused_imports)] -pub struct ConnCallbackMsgC { +pub struct ConnectionCallbackMessageC { tag: ConnCallbackMsgCTag, data: ConnCallbackMsgCUnion, } @@ -21,7 +21,7 @@ pub enum ConnCallbackMsgCTag { #[allow(unused_imports)] pub union ConnCallbackMsgCUnion { nul: *mut c_void, - profile: ManuallyDrop<GameProfile>, + profile: ManuallyDrop<GameProfileC>, conn_err: ConnErrTypeC } @@ -56,12 +56,12 @@ impl From<ConnectionErrorType> for ConnErrTypeC { } } -impl From<ConnCallbackMsgC> for ConnectionCallbackMessage { - fn from(mut value: ConnCallbackMsgC) -> Self { +impl From<ConnectionCallbackMessageC> for ConnectionCallbackMessage { + fn from(mut value: ConnectionCallbackMessageC) -> Self { match value.tag { ConnCallbackMsgCTag::Profile => unsafe { let profile = ManuallyDrop::take(&mut value.data.profile); - ConnectionCallbackMessage::Profile(profile) + ConnectionCallbackMessage::Profile(profile.into()) } ConnCallbackMsgCTag::Deny => unsafe { ConnectionCallbackMessage::Deny(value.data.conn_err.into()) @@ -83,43 +83,43 @@ impl From<ConnCallbackMsgC> for ConnectionCallbackMessage { } } -impl From<ConnectionCallbackMessage> for ConnCallbackMsgC { +impl From<ConnectionCallbackMessage> for ConnectionCallbackMessageC { fn from(value: ConnectionCallbackMessage) -> Self { match value { ConnectionCallbackMessage::Profile(profile) => { - ConnCallbackMsgC { + ConnectionCallbackMessageC { tag: ConnCallbackMsgCTag::Profile, data: ConnCallbackMsgCUnion { - profile: ManuallyDrop::new(profile) + profile: ManuallyDrop::new(profile.into()) } } } ConnectionCallbackMessage::Deny(conn_err) => { - ConnCallbackMsgC { + ConnectionCallbackMessageC { tag: ConnCallbackMsgCTag::Deny, data: ConnCallbackMsgCUnion { conn_err: conn_err.into() } } } ConnectionCallbackMessage::Fail(conn_err) => { - ConnCallbackMsgC { + ConnectionCallbackMessageC { tag: ConnCallbackMsgCTag::Fail, data: ConnCallbackMsgCUnion { conn_err: conn_err.into() } } } ConnectionCallbackMessage::Ok => { - ConnCallbackMsgC { + ConnectionCallbackMessageC { tag: ConnCallbackMsgCTag::Ok, data: ConnCallbackMsgCUnion { nul: null_mut() } } } ConnectionCallbackMessage::Welcome => { - ConnCallbackMsgC { + ConnectionCallbackMessageC { tag: ConnCallbackMsgCTag::Welcome, data: ConnCallbackMsgCUnion { nul: null_mut() } } } ConnectionCallbackMessage::Err => { - ConnCallbackMsgC { + ConnectionCallbackMessageC { tag: ConnCallbackMsgCTag::Err, data: ConnCallbackMsgCUnion { nul: null_mut() } } diff --git a/core_c/src/data_c/connection_message_c.rs b/core_c/src/data_c/connection_message_c.rs index 14a49ac..418342d 100644 --- a/core_c/src/data_c/connection_message_c.rs +++ b/core_c/src/data_c/connection_message_c.rs @@ -7,7 +7,7 @@ use nogamepads_lib_rs::pad_data::pad_player_info::nogamepads_player_info::Player #[repr(C)] #[allow(unused_imports)] -pub struct ConnMsgC { +pub struct ConnectionMessageC { tag: ConnMsgCTag, data: ConnMsgCUnion } @@ -25,8 +25,8 @@ pub union ConnMsgCUnion { info: ManuallyDrop<PlayerInfo> } -impl From<ConnMsgC> for ConnectionMessage { - fn from(mut value: ConnMsgC) -> Self { +impl From<ConnectionMessageC> for ConnectionMessage { + fn from(mut value: ConnectionMessageC) -> Self { match value.tag { Connection => unsafe { let info = ManuallyDrop::take(&mut value.data.info); @@ -51,41 +51,41 @@ impl From<ConnMsgC> for ConnectionMessage { } } -impl From<ConnectionMessage> for ConnMsgC { +impl From<ConnectionMessage> for ConnectionMessageC { fn from(value: ConnectionMessage) -> Self { match value { ConnectionMessage::Connection(info) => { - ConnMsgC { + ConnectionMessageC { tag: Connection, data: ConnMsgCUnion { info: ManuallyDrop::new(info) } } } ConnectionMessage::RequestProfile => { - ConnMsgC { + ConnectionMessageC { tag: RequestProfile, data: ConnMsgCUnion { nul: null_mut() } } } ConnectionMessage::RequestLayoutConfigure => { - ConnMsgC { + ConnectionMessageC { tag: RequestLayoutConfigure, data: ConnMsgCUnion { nul: null_mut() } } } ConnectionMessage::RequestSkinPackage => { - ConnMsgC { + ConnectionMessageC { tag: RequestSkinPackage, data: ConnMsgCUnion { nul: null_mut() } } } ConnectionMessage::Ready => { - ConnMsgC { + ConnectionMessageC { tag: Ready, data: ConnMsgCUnion { nul: null_mut() } } } ConnectionMessage::Err => { - ConnMsgC { + ConnectionMessageC { tag: ConnMsgCTag::Err, data: ConnMsgCUnion { nul: null_mut() } } diff --git a/core_c/src/data_c/control_message_c.rs b/core_c/src/data_c/control_message_c.rs index 41a3e09..84f2288 100644 --- a/core_c/src/data_c/control_message_c.rs +++ b/core_c/src/data_c/control_message_c.rs @@ -1,12 +1,12 @@ use crate::data_c::common::KeyData; -use crate::{c_char_to_string_safe, string_to_c_char_safe}; +use crate::{str_c_to_rs, str_rs_to_c}; use nogamepads_lib_rs::pad_data::pad_messages::nogamepads_messages::ControlMessage; use std::ffi::{c_char, c_void}; use std::ptr::null_mut; #[repr(C)] #[allow(unused_imports)] -pub struct CtrlMsgC { +pub struct ControlMessageC { tag: CtrlMsgCTag, data: CtrlMsgCUnion } @@ -51,11 +51,11 @@ pub struct StrData { str: *const c_char } -impl From<CtrlMsgC> for ControlMessage { - fn from(msg_c: CtrlMsgC) -> Self { +impl From<ControlMessageC> for ControlMessage { + fn from(msg_c: ControlMessageC) -> Self { match msg_c.tag { CtrlMsgCTag::Msg => unsafe { - let str = c_char_to_string_safe(msg_c.data.str.str); + let str = str_c_to_rs(msg_c.data.str.str); if str.is_some() { ControlMessage::Msg(str.unwrap()) } else { @@ -86,19 +86,19 @@ impl From<CtrlMsgC> for ControlMessage { } } -impl From<ControlMessage> for CtrlMsgC { +impl From<ControlMessage> for ControlMessageC { fn from(msg_rs: ControlMessage) -> Self { match msg_rs { ControlMessage::Msg(str_msg) => { - CtrlMsgC { + ControlMessageC { tag: CtrlMsgCTag::Msg, data: CtrlMsgCUnion { - str: StrData { str: string_to_c_char_safe(str_msg).1 }, + str: StrData { str: str_rs_to_c(str_msg).1 }, } } } ControlMessage::Pressed(key) => { - CtrlMsgC { + ControlMessageC { tag: CtrlMsgCTag::Pressed, data: CtrlMsgCUnion { key: KeyData { key }, @@ -106,7 +106,7 @@ impl From<ControlMessage> for CtrlMsgC { } } ControlMessage::Released(key) => { - CtrlMsgC { + ControlMessageC { tag: CtrlMsgCTag::Released, data: CtrlMsgCUnion { key: KeyData { key }, @@ -114,7 +114,7 @@ impl From<ControlMessage> for CtrlMsgC { } } ControlMessage::Axis(key, ax) => { - CtrlMsgC { + ControlMessageC { tag: CtrlMsgCTag::Axis, data: CtrlMsgCUnion { axis: AxisData { key, ax } @@ -122,7 +122,7 @@ impl From<ControlMessage> for CtrlMsgC { } } ControlMessage::Dir(key, (x, y)) => { - CtrlMsgC { + ControlMessageC { tag: CtrlMsgCTag::Dir, data: CtrlMsgCUnion { dir: DirData { key, x, y } @@ -130,7 +130,7 @@ impl From<ControlMessage> for CtrlMsgC { } } ControlMessage::Exit => { - CtrlMsgC { + ControlMessageC { tag: CtrlMsgCTag::Exit, data: CtrlMsgCUnion { nul: null_mut(), @@ -138,7 +138,7 @@ impl From<ControlMessage> for CtrlMsgC { } } ControlMessage::Err => { - CtrlMsgC { + ControlMessageC { tag: CtrlMsgCTag::Err, data: CtrlMsgCUnion { nul: null_mut(), diff --git a/core_c/src/data_c/game_message_c.rs b/core_c/src/data_c/game_message_c.rs index 8b275ff..b6a2b89 100644 --- a/core_c/src/data_c/game_message_c.rs +++ b/core_c/src/data_c/game_message_c.rs @@ -5,7 +5,7 @@ use crate::data_c::common::KeyData; #[repr(C)] #[allow(unused_imports)] -pub struct GameMsgC { +pub struct GameMessageC { tag: GameMsgCTag, data: GameMsgCUnion } @@ -54,8 +54,8 @@ impl From<LeaveReason> for LeaveReasonData { } } -impl From<GameMsgC> for GameMessage { - fn from(msg: GameMsgC) -> Self { +impl From<GameMessageC> for GameMessage { + fn from(msg: GameMessageC) -> Self { match msg.tag { GameMsgCTag::SkinEventTrigger => unsafe { GameMessage::SkinEventTrigger(msg.data.key.key) @@ -76,35 +76,35 @@ impl From<GameMsgC> for GameMessage { } } -impl From<GameMessage> for GameMsgC { +impl From<GameMessage> for GameMessageC { fn from(msg: GameMessage) -> Self { match msg { GameMessage::SkinEventTrigger(key) => { - GameMsgC { + GameMessageC { tag: GameMsgCTag::SkinEventTrigger, data: GameMsgCUnion { key: KeyData { key } } } } GameMessage::DisableKey(key) => { - GameMsgC { + GameMessageC { tag: GameMsgCTag::DisableKey, data: GameMsgCUnion { key: KeyData { key } } } } GameMessage::EnableKey(key) => { - GameMsgC { + GameMessageC { tag: GameMsgCTag::EnableKey, data: GameMsgCUnion { key: KeyData { key } } } } GameMessage::Leave(reason) => { - GameMsgC { + GameMessageC { tag: GameMsgCTag::Leave, data: GameMsgCUnion { reason: reason.into() } } } GameMessage::Err => { - GameMsgC { + GameMessageC { tag: GameMsgCTag::Err, data: GameMsgCUnion { nul: null_mut() } } diff --git a/core_c/src/data_c/game_profile_c.rs b/core_c/src/data_c/game_profile_c.rs index 199329a..d0072c8 100644 --- a/core_c/src/data_c/game_profile_c.rs +++ b/core_c/src/data_c/game_profile_c.rs @@ -1,44 +1,101 @@ -use std::ffi::c_char; -use crate::{box_into_raw, c_char_to_string_safe}; +use crate::{str_c_to_rs, str_rs_to_c}; use nogamepads_lib_rs::pad_data::game_profile::game_profile::GameProfile; +use std::ffi::c_char; + +#[repr(C)] +#[derive(Copy, Clone)] +#[allow(unused_imports)] +pub struct GameProfileC { + game_name: *const c_char, + game_description: *const c_char, + organization: *const c_char, + version: *const c_char, + website: *const c_char, + email: *const c_char +} + +impl From<GameProfileC> for GameProfile { + fn from(value: GameProfileC) -> Self { + let unknown = "".to_string(); + GameProfile { + game_name: str_c_to_rs(value.game_name).unwrap_or(unknown.clone()), + game_description: str_c_to_rs(value.game_description).unwrap_or(unknown.clone()), + organization: str_c_to_rs(value.organization).unwrap_or(unknown.clone()), + version: str_c_to_rs(value.version).unwrap_or(unknown.clone()), + website: str_c_to_rs(value.website).unwrap_or(unknown.clone()), + email: str_c_to_rs(value.email).unwrap_or(unknown.clone()) + } + } +} + +impl From<GameProfile> for GameProfileC { + fn from(value: GameProfile) -> Self { + GameProfileC { + game_name: str_rs_to_c(value.game_name).1, + game_description: str_rs_to_c(value.game_description).1, + organization: str_rs_to_c(value.organization).1, + version: str_rs_to_c(value.version).1, + website: str_rs_to_c(value.website).1, + email: str_rs_to_c(value.email).1 + } + } +} + +impl From<&GameProfileC> for &GameProfile { + fn from(value: &GameProfileC) -> Self { + value.into() + } +} + +impl From<&GameProfile> for &GameProfileC { + fn from(value: &GameProfile) -> Self { + value.into() + } +} #[unsafe(no_mangle)] -pub extern "C" fn init_game_profile() -> *mut GameProfile { - box_into_raw!(GameProfile::default()) +pub extern "C" fn init_game_profile() -> GameProfileC { + GameProfile::default().into() } #[unsafe(no_mangle)] -pub extern "C" fn set_game_profile_name(game_profile: &mut GameProfile, value: *const c_char) { - let value = c_char_to_string_safe(value).unwrap_or_default(); - game_profile.game_name(value.as_str()); +pub extern "C" fn set_game_profile_name(game_profile: GameProfileC, value: *const c_char) -> GameProfileC { + let value = str_c_to_rs(value).unwrap_or_default(); + let mut raw = GameProfile::from(game_profile); + raw.game_name(value.as_str()).to_owned().into() } #[unsafe(no_mangle)] -pub extern "C" fn set_game_profile_description(game_profile: &mut GameProfile, value: *const c_char) { - let value = c_char_to_string_safe(value).unwrap_or_default(); - game_profile.game_description(value.as_str()); +pub extern "C" fn set_game_profile_description(game_profile: GameProfileC, value: *const c_char) -> GameProfileC { + let value = str_c_to_rs(value).unwrap_or_default(); + let mut raw = GameProfile::from(game_profile); + raw.game_description(value.as_str()).to_owned().into() } #[unsafe(no_mangle)] -pub extern "C" fn set_game_profile_organization(game_profile: &mut GameProfile, value: *const c_char) { - let value = c_char_to_string_safe(value).unwrap_or_default(); - game_profile.organization(value.as_str()); +pub extern "C" fn set_game_profile_organization(game_profile: GameProfileC, value: *const c_char) -> GameProfileC { + let value = str_c_to_rs(value).unwrap_or_default(); + let mut raw = GameProfile::from(game_profile); + raw.organization(value.as_str()).to_owned().into() } #[unsafe(no_mangle)] -pub extern "C" fn set_game_profile_version(game_profile: &mut GameProfile, value: *const c_char) { - let value = c_char_to_string_safe(value).unwrap_or_default(); - game_profile.version(value.as_str()); +pub extern "C" fn set_game_profile_version(game_profile: GameProfileC, value: *const c_char) -> GameProfileC { + let value = str_c_to_rs(value).unwrap_or_default(); + let mut raw = GameProfile::from(game_profile); + raw.version(value.as_str()).to_owned().into() } #[unsafe(no_mangle)] -pub extern "C" fn set_game_profile_website(game_profile: &mut GameProfile, value: *const c_char) { - let value = c_char_to_string_safe(value).unwrap_or_default(); - game_profile.website(value.as_str()); +pub extern "C" fn set_game_profile_website(game_profile: GameProfileC, value: *const c_char) -> GameProfileC { + let value = str_c_to_rs(value).unwrap_or_default(); + let mut raw = GameProfile::from(game_profile); + raw.website(value.as_str()).to_owned().into() } #[unsafe(no_mangle)] -pub extern "C" fn set_game_profile_email(game_profile: &mut GameProfile, value: *const c_char) { - let value = c_char_to_string_safe(value).unwrap_or_default(); - game_profile.email(value.as_str()); +pub extern "C" fn set_game_profile_email(game_profile: GameProfileC, value: *const c_char) -> GameProfileC { + let value = str_c_to_rs(value).unwrap_or_default(); + let mut raw = GameProfile::from(game_profile); + raw.email(value.as_str()).to_owned().into() }
\ No newline at end of file diff --git a/core_c/src/data_c/player_info_c.rs b/core_c/src/data_c/player_info_c.rs index 4252b49..f51a9f9 100644 --- a/core_c/src/data_c/player_info_c.rs +++ b/core_c/src/data_c/player_info_c.rs @@ -1,33 +1,95 @@ +use crate::{str_c_to_rs, str_rs_to_c}; +use nogamepads_lib_rs::pad_data::pad_player_info::nogamepads_player_info::{PlayerAccountInfo, PlayerCustomizeInfo, PlayerInfo}; use std::ffi::c_char; -use nogamepads_lib_rs::pad_data::pad_player_info::nogamepads_player_info::PlayerInfo; -use crate::{box_into_raw, c_char_to_string_safe}; + +#[repr(C)] +#[derive(Copy, Clone)] +#[allow(unused_imports)] +pub struct PlayerInfoC { + account_id: *const c_char, + account_hash: *const c_char, + + customize_nickname: *const c_char, + customize_color_hue: i32, + customize_color_saturation: f64, + customize_color_value: f64, +} + +impl From<PlayerInfoC> for PlayerInfo { + fn from(value: PlayerInfoC) -> Self { + let unknown = "unknown".to_string(); + PlayerInfo { + account : PlayerAccountInfo { + id: str_c_to_rs(value.account_id).unwrap_or(unknown.clone()), + player_hash: str_c_to_rs(value.account_hash).unwrap_or(unknown.clone()), + }, + customize: PlayerCustomizeInfo { + nickname: str_c_to_rs(value.customize_nickname).unwrap_or(unknown.clone()), + color_hue: value.customize_color_hue, + color_saturation: value.customize_color_saturation, + color_value: value.customize_color_value, + } + } + } +} + +impl From<PlayerInfo> for PlayerInfoC { + fn from(value: PlayerInfo) -> Self { + PlayerInfoC { + account_id: str_rs_to_c(value.account.id).1, + account_hash: str_rs_to_c(value.account.player_hash).1, + customize_nickname: str_rs_to_c(value.customize.nickname).1, + customize_color_hue: value.customize.color_hue, + customize_color_saturation: value.customize.color_saturation, + customize_color_value: value.customize.color_value, + } + } +} + +impl From<&PlayerInfoC> for &PlayerInfo { + fn from(value: &PlayerInfoC) -> Self { + value.into() + } +} + +impl From<&PlayerInfo> for &PlayerInfoC { + fn from(value: &PlayerInfo) -> Self { + value.into() + } +} #[unsafe(no_mangle)] -pub extern "C" fn init_player_info() -> *mut PlayerInfo { - box_into_raw!(PlayerInfo::new()) +pub extern "C" fn init_player_info() -> PlayerInfoC { + PlayerInfo::new().into() } #[unsafe(no_mangle)] pub extern "C" fn set_player_info_account( - info: &mut PlayerInfo, - id: *const c_char, - password: *const c_char) { - let id = c_char_to_string_safe(id).unwrap_or("".to_string()); - let password = c_char_to_string_safe(password).unwrap_or("".to_string()); - info.setup_account_info(id.as_str(), password.as_str()); + info: PlayerInfoC, id: *const c_char, password: *const c_char) -> PlayerInfoC { + + let id = str_c_to_rs(id).unwrap_or("".to_string()); + let password = str_c_to_rs(password).unwrap_or("".to_string()); + + let mut raw_info = PlayerInfo::from(info); + raw_info.setup_account_info(id.as_str(), password.as_str()); + raw_info.into() } #[unsafe(no_mangle)] pub extern "C" fn set_player_info_color( - info: &mut PlayerInfo, - h: i32, s: f64, v: f64) { - info.set_customize_color_hsv(h, s, v); + info: PlayerInfoC, h: i32, s: f64, v: f64) -> PlayerInfoC { + + let mut raw_info = PlayerInfo::from(info); + raw_info.set_customize_color_hsv(h, s, v); + raw_info.into() } #[unsafe(no_mangle)] pub extern "C" fn set_player_info_nickname( - info: &mut PlayerInfo, - nickname: *const c_char) { - let nickname = c_char_to_string_safe(nickname).unwrap_or("".to_string()); - info.set_nickname(nickname.as_str()); + info: PlayerInfoC, nickname: *const c_char) -> PlayerInfoC { + let nickname = str_c_to_rs(nickname).unwrap_or("".to_string()); + + let mut raw_info = PlayerInfo::from(info); + raw_info.set_nickname(nickname.as_str()); + raw_info.into() }
\ No newline at end of file diff --git a/core_c/src/data_c/player_info_list_c.rs b/core_c/src/data_c/player_info_list_c.rs index 9ad8918..99d5c35 100644 --- a/core_c/src/data_c/player_info_list_c.rs +++ b/core_c/src/data_c/player_info_list_c.rs @@ -1,8 +1,8 @@ -use nogamepads_lib_rs::pad_data::pad_player_info::nogamepads_player_info::PlayerInfo; +use crate::data_c::player_info_c::PlayerInfoC; #[repr(C)] pub struct PlayerList { - pub(crate) players: *mut PlayerInfo, + pub(crate) players: *mut PlayerInfoC, pub(crate) len: usize, pub(crate) capacity: usize, }
\ No newline at end of file diff --git a/core_c/src/lib.rs b/core_c/src/lib.rs index bdeb7ef..6efd0e9 100644 --- a/core_c/src/lib.rs +++ b/core_c/src/lib.rs @@ -3,13 +3,13 @@ use std::ffi::{c_char, CStr, CString}; pub mod data_c; pub mod service_c; -pub fn string_to_c_char_safe(s: String) -> (CString, *const c_char) { +pub fn str_rs_to_c(s: String) -> (CString, *const c_char) { let c_string = CString::new(s).expect(""); let ptr = c_string.as_ptr(); (c_string, ptr) } -pub fn c_char_to_string_safe(ptr: *const c_char) -> Option<String> { +pub fn str_c_to_rs(ptr: *const c_char) -> Option<String> { if ptr.is_null() { return None; } diff --git a/core_c/src/service_c/padclient.rs b/core_c/src/service_c/padclient.rs index 77e7d87..60120ab 100644 --- a/core_c/src/service_c/padclient.rs +++ b/core_c/src/service_c/padclient.rs @@ -1,51 +1,104 @@ +use crate::data_c::control_message_c::ControlMessageC; +use crate::data_c::game_message_c::GameMessageC; +use crate::data_c::player_info_c::PlayerInfoC; +use crate::{box_into_raw, str_c_to_rs, str_rs_to_c}; +use nogamepads_lib_rs::pad_data::pad_messages::nogamepads_messages::GameMessage; +use nogamepads_lib_rs::pad_service::client::nogamepads_client::PadClient; +use nogamepads_lib_rs::DEFAULT_PORT; use std::ffi::c_char; use std::net::{IpAddr, Ipv4Addr}; use std::str::FromStr; -use nogamepads_lib_rs::DEFAULT_PORT; -use nogamepads_lib_rs::pad_data::pad_messages::nogamepads_messages::GameMessage; -use nogamepads_lib_rs::pad_data::pad_player_info::nogamepads_player_info::PlayerInfo; -use nogamepads_lib_rs::pad_service::client::nogamepads_client::PadClient; -use crate::{box_into_raw, c_char_to_string_safe}; -use crate::data_c::control_message_c::CtrlMsgC; -use crate::data_c::game_message_c::GameMsgC; + +#[repr(C)] +#[derive(Copy, Clone)] +#[allow(unused_imports)] +pub struct PadClientC { + target_address: *const c_char, + target_port: u16, + bind_player: PlayerInfoC, + enable_console: bool, + quiet: bool +} + +impl From<PadClientC> for PadClient { + fn from(value: PadClientC) -> Self { + let address = IpAddr::from_str(str_c_to_rs(value.target_address).unwrap_or("".to_string()).as_str()).unwrap_or( + IpAddr::from(Ipv4Addr::new(127, 0, 0, 1)) + ); + let port = value.target_port; + let mut client = PadClient::bind_addr_with_port(address, port); + client.bind_player(value.bind_player.into()); + if value.enable_console { client.enable_console(); } + if value.quiet { client.quiet(); } + client + } +} + +impl From<PadClient> for PadClientC { + fn from(mut value: PadClient) -> Self { + let (addr, port) = value.clone_addr(); + + PadClientC { + target_address: str_rs_to_c(addr.to_string()).1, + target_port: port, + bind_player: value.unbind_player().into(), + enable_console: value.is_enable_console(), + quiet: value.is_quiet(), + } + } +} +impl From<&mut PadClient> for PadClientC { + fn from(value: &mut PadClient) -> Self { + value.into() + } +} // 构建 #[unsafe(no_mangle)] -pub extern "C" fn init_client(address: *const c_char) -> *mut PadClient { - let addr_str = c_char_to_string_safe(address).unwrap_or("127.0.0.1".to_string()); +pub extern "C" fn init_client(address: *const c_char) -> PadClientC { + let addr_str = str_c_to_rs(address).unwrap_or("127.0.0.1".to_string()); let addr_v4 = Ipv4Addr::from_str(addr_str.as_str()).unwrap_or( Ipv4Addr::new(127, 0, 0, 1)); - box_into_raw!(PadClient::bind_addr_with_port(IpAddr::from(addr_v4), DEFAULT_PORT)) + PadClient::bind_addr_with_port(IpAddr::from(addr_v4), DEFAULT_PORT).into() } #[unsafe(no_mangle)] -pub unsafe extern "C" fn init_client_with_port(address: *const c_char, port: u16) -> *mut PadClient { - let addr_str = c_char_to_string_safe(address).unwrap_or("127.0.0.1".to_string()); +pub unsafe extern "C" fn init_client_with_port(address: *const c_char, port: u16) -> PadClientC { + let addr_str = str_c_to_rs(address).unwrap_or("127.0.0.1".to_string()); let addr_v4 = Ipv4Addr::from_str(addr_str.as_str()).unwrap_or( Ipv4Addr::new(127, 0, 0, 1)); - box_into_raw!(PadClient::bind_addr_with_port(IpAddr::from(addr_v4), port)) + PadClient::bind_addr_with_port(IpAddr::from(addr_v4), port).into() +} + +#[unsafe(no_mangle)] +pub extern "C" fn set_client_quiet(client: PadClientC) -> PadClientC { + let mut raw: PadClient = client.into(); + raw.quiet().into() } #[unsafe(no_mangle)] -pub extern "C" fn set_client_quiet(client: &mut PadClient) { - client.quiet(); +pub extern "C" fn enable_client_console(client: PadClientC) -> PadClientC { + let mut raw: PadClient = client.into(); + raw.enable_console().into() } #[unsafe(no_mangle)] -pub extern "C" fn enable_client_console(client: &mut PadClient) { - client.enable_console(); +pub extern "C" fn bind_player_to_client(client: PadClientC, info: PlayerInfoC) -> PadClientC { + let mut raw: PadClient = client.into(); + raw.bind_player(info.into()).into() } #[unsafe(no_mangle)] -pub extern "C" fn bind_player_to_client(client: &mut PadClient, info: &mut PlayerInfo) { - client.bind_player(info.clone()); +pub extern "C" fn complete(client: PadClientC) -> *mut PadClient { + let client: PadClient = client.into(); + box_into_raw!(client) } // 状态控制 #[unsafe(no_mangle)] -pub extern "C" fn connect_client_to_server(client: *mut PadClient) { +pub extern "C" fn connect_client_to_server(client: &mut PadClient) { let client = unsafe { Box::from_raw(client) }; client.connect(); } @@ -58,16 +111,16 @@ pub extern "C" fn exit_client_from_server(client: &PadClient) { // 消息管理 #[unsafe(no_mangle)] -pub extern "C" fn put_a_msg_to_server(client: &PadClient, msg: CtrlMsgC) { +pub extern "C" fn put_a_msg_to_server(client: &PadClient, msg: ControlMessageC) { client.put_msg(msg.into()) } #[unsafe(no_mangle)] -pub extern "C" fn pop_a_msg_from_server(client: &PadClient) -> GameMsgC { +pub extern "C" fn pop_a_msg_from_server(client: &PadClient) -> GameMessageC { client.pop_a_msg().unwrap_or(GameMessage::Err).into() } #[unsafe(no_mangle)] -pub extern "C" fn pop_msg_from_server_or(client: &PadClient, or: GameMsgC) -> GameMsgC { +pub extern "C" fn pop_msg_from_server_or(client: &PadClient, or: GameMessageC) -> GameMessageC { client.pop_msg_or(or.into()).into() }
\ No newline at end of file diff --git a/core_c/src/service_c/padserver.rs b/core_c/src/service_c/padserver.rs index d0e3267..ee1a6a8 100644 --- a/core_c/src/service_c/padserver.rs +++ b/core_c/src/service_c/padserver.rs @@ -1,23 +1,24 @@ -use std::collections::HashMap; -use crate::{box_into_raw, c_char_to_string_safe}; -use nogamepads_lib_rs::pad_data::game_profile::game_profile::GameProfile; +use crate::data_c::control_message_c::ControlMessageC; +use crate::data_c::game_message_c::GameMessageC; +use crate::data_c::game_profile_c::GameProfileC; +use crate::data_c::player_info_c::PlayerInfoC; +use crate::data_c::player_info_list_c::PlayerList; +use crate::{box_into_raw, str_c_to_rs}; +use nogamepads_lib_rs::pad_data::pad_messages::nogamepads_messages::ControlMessage; +use nogamepads_lib_rs::pad_data::pad_player_info::nogamepads_player_info::PlayerInfo; use nogamepads_lib_rs::pad_service::server::nogamepads_server::PadServer; use nogamepads_lib_rs::DEFAULT_PORT; +use std::collections::HashMap; use std::ffi::c_char; use std::net::{IpAddr, Ipv4Addr}; use std::str::FromStr; use std::sync::{Arc, MutexGuard, PoisonError}; -use nogamepads_lib_rs::pad_data::pad_messages::nogamepads_messages::ControlMessage; -use nogamepads_lib_rs::pad_data::pad_player_info::nogamepads_player_info::PlayerInfo; -use crate::data_c::control_message_c::CtrlMsgC; -use crate::data_c::game_message_c::GameMsgC; -use crate::data_c::player_info_list_c::PlayerList; // 构建 #[unsafe(no_mangle)] pub extern "C" fn init_server(address: *const c_char) -> *mut PadServer { - let addr_str = c_char_to_string_safe(address).unwrap_or("127.0.0.1".to_string()); + let addr_str = str_c_to_rs(address).unwrap_or("127.0.0.1".to_string()); let addr_v4 = Ipv4Addr::from_str(addr_str.as_str()).unwrap_or( Ipv4Addr::new(127, 0, 0, 1)); let mut server = PadServer::default(); @@ -27,7 +28,7 @@ pub extern "C" fn init_server(address: *const c_char) -> *mut PadServer { #[unsafe(no_mangle)] pub extern "C" fn init_server_with_port(address: *const c_char, port: u16) -> *mut PadServer { - let addr_str = c_char_to_string_safe(address).unwrap_or("127.0.0.1".to_string()); + let addr_str = str_c_to_rs(address).unwrap_or("127.0.0.1".to_string()); let addr_v4 = Ipv4Addr::from_str(addr_str.as_str()).unwrap_or( Ipv4Addr::new(127, 0, 0, 1)); let mut server = PadServer::default(); @@ -46,8 +47,8 @@ pub extern "C" fn enable_server_console(server: &mut PadServer) { } #[unsafe(no_mangle)] -pub extern "C" fn bind_profile_to_server(server: &mut PadServer, profile: &mut GameProfile) { - server.put_profile(profile.clone()); +pub extern "C" fn bind_profile_to_server(server: &mut PadServer, profile: &GameProfileC) { + server.put_profile(profile.clone().into()); } // 状态控制 @@ -85,59 +86,59 @@ pub extern "C" fn is_server_game_locked(server: *mut PadServer) -> bool { // 消息管理 #[unsafe(no_mangle)] -pub extern "C" fn put_a_msg_to_player(server: *mut PadServer, msg: GameMsgC, player: &PlayerInfo) { +pub extern "C" fn put_a_msg_to_player(server: *mut PadServer, msg: GameMessageC, player: &PlayerInfoC) { let server = unsafe { Box::from_raw(server) }; - server.put_msg_to(msg.into(), player); + server.put_msg_to(msg.into(), player.into()); } #[unsafe(no_mangle)] -pub extern "C" fn put_msg_to_all_players(server: *mut PadServer, msg: GameMsgC) { +pub extern "C" fn put_msg_to_all_players(server: *mut PadServer, msg: GameMessageC) { let server = unsafe { Box::from_raw(server) }; server.put_msg_to_all(&msg.into()); } #[unsafe(no_mangle)] -pub extern "C" fn pop_a_msg_from_player(server: *mut PadServer, player: &PlayerInfo) -> CtrlMsgC { +pub extern "C" fn pop_a_msg_from_player(server: *mut PadServer, player: &PlayerInfoC) -> ControlMessageC { let server = unsafe { Box::from_raw(server) }; - server.pop_a_msg(player).unwrap_or(ControlMessage::Err).into() + server.pop_a_msg(player.into()).unwrap_or(ControlMessage::Err).into() } #[unsafe(no_mangle)] -pub extern "C" fn pop_msg_from_player_or(server: *mut PadServer, player: &PlayerInfo, or: CtrlMsgC) -> CtrlMsgC { +pub extern "C" fn pop_msg_from_player_or(server: *mut PadServer, player: &PlayerInfoC, or: ControlMessageC) -> ControlMessageC { let server = unsafe { Box::from_raw(server) }; - let msg = server.pop_msg_or(player, or.into()); + let msg = server.pop_msg_or(player.into(), or.into()); msg.into() } // 玩家管理 #[unsafe(no_mangle)] -pub extern "C" fn is_player_online(server: *mut PadServer, player: &PlayerInfo) -> bool { +pub extern "C" fn is_player_online(server: *mut PadServer, player: &PlayerInfoC) -> bool { let server = unsafe { Box::from_raw(server) }; - server.is_player_online(player) + server.is_player_online(player.into()) } #[unsafe(no_mangle)] -pub extern "C" fn is_player_banned(server: *mut PadServer, player: &PlayerInfo) -> bool { +pub extern "C" fn is_player_banned(server: *mut PadServer, player: &PlayerInfoC) -> bool { let server = unsafe { Box::from_raw(server) }; - server.is_player_banned(player) + server.is_player_banned(player.into()) } #[unsafe(no_mangle)] -pub extern "C" fn kick_player(server: *mut PadServer, player: &PlayerInfo) { +pub extern "C" fn kick_player(server: *mut PadServer, player: &PlayerInfoC) { let server = unsafe { Box::from_raw(server) }; - server.kick_player(player); + server.kick_player(player.into()); } #[unsafe(no_mangle)] -pub extern "C" fn ban_player(server: *mut PadServer, player: &PlayerInfo) { +pub extern "C" fn ban_player(server: *mut PadServer, player: &PlayerInfoC) { let server = unsafe { Box::from_raw(server) }; - server.ban_player(player); + server.ban_player(player.into()); } #[unsafe(no_mangle)] -pub extern "C" fn pardon_player(server: *mut PadServer, player: &PlayerInfo) { +pub extern "C" fn pardon_player(server: *mut PadServer, player: &PlayerInfoC) { let server = unsafe { Box::from_raw(server) }; - server.pardon_player(player); + server.pardon_player(player.into()); } #[unsafe(no_mangle)] @@ -161,8 +162,12 @@ fn process_list_result(list: Result<Vec<PlayerInfo>, PoisonError<MutexGuard<Hash } else { result = vec![]; } + let mut result_c: Vec<PlayerInfoC> = Vec::new(); + for item in result { + result_c.push(item.into()); + } - let mut vec = result.into_boxed_slice(); + let mut vec = result_c.into_boxed_slice(); let ptr = vec.as_mut_ptr(); let len = vec.len(); let capacity = vec.len(); diff --git a/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Core/Data/HsvColor.cs b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Core/Data/HsvColor.cs new file mode 100644 index 0000000..a534be6 --- /dev/null +++ b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Core/Data/HsvColor.cs @@ -0,0 +1,158 @@ +namespace NoGamepadsSharp_Data.Data; + +public struct HsvColor +{ + private int _h; + private float _s; + private float _v; + + public HsvColor(int h, float s, float v) + { + _h = h; + _s = s; + _v = v; + } + + public HsvColor(float r, float g, float b) + { + Converter.ToHsv(r, g, b, out int h, out float s, out float v); + _h = h; + _s = s; + _v = v; + } + + public int hue + { + get => _h; + set => _h = int.Clamp(value, 0, 360); + } + + public float saturation + { + get => _s; + set => _s = float.Clamp(value, 0, 1); + } + + public float value + { + get => _v; + set => _v = float.Clamp(value, 0, 1); + } + + public float red + { + get + { + Converter.ToRgb(_h, _s, _v, out float f, out _, out _); + return f; + } + set + { + Converter.ToRgb(_h, _s, _v, out float r, out float g, out float b); + r = float.Clamp(value, 0, 1); + Converter.ToHsv(r, g, b, out int h, out float s, out float v); + _h = h; + _s = s; + _v = v; + } + } + + public float green + { + get + { + Converter.ToRgb(_h, _s, _v, out _, out float f, out _); + return f; + } + set + { + Converter.ToRgb(_h, _s, _v, out float r, out float g, out float b); + g = float.Clamp(value, 0, 1); + Converter.ToHsv(r, g, b, out int h, out float s, out float v); + _h = h; + _s = s; + _v = v; + } + } + + public float blue + { + get + { + Converter.ToRgb(_h, _s, _v, out _, out _, out float f); + return f; + } + set + { + Converter.ToRgb(_h, _s, _v, out float r, out float g, out float b); + b = float.Clamp(value, 0, 1); + Converter.ToHsv(r, g, b, out int h, out float s, out float v); + _h = h; + _s = s; + _v = v; + } + } + + public class Converter + { + public static void ToRgb(int h, float s, float v, out float r, out float g, out float b) + { + h = (h % 360 + 360) % 360; + + if (s <= 0.0f) + { + r = g = b = v; + return; + } + + float hh = h / 60.0f; + int i = (int)hh; + float ff = hh - i; + float p = v * (1.0f - s); + float q = v * (1.0f - s * ff); + float t = v * (1.0f - s * (1.0f - ff)); + + switch (i) + { + case 0: r = v; g = t; b = p; break; + case 1: r = q; g = v; b = p; break; + case 2: r = p; g = v; b = t; break; + case 3: r = p; g = q; b = v; break; + case 4: r = t; g = p; b = v; break; + default: r = v; g = p; b = q; break; + } + } + + public static void ToHsv(float r, float g, float b, out int h, out float s, out float v) + { + float min = Math.Min(Math.Min(r, g), b); + float max = Math.Max(Math.Max(r, g), b); + float delta = max - min; + + v = max; + + if (delta <= 1e-6f) + { + h = 0; + s = 0.0f; + return; + } + + s = delta / max; + float hh; + + if (Math.Abs(r - max) < 0.001f) + hh = (g - b) / delta; + else if (Math.Abs(g - max) < 0.001f) + hh = (b - r) / delta + 2.0f; + else + hh = (r - g) / delta + 4.0f; + + hh *= 60.0f; + if (hh < 0.0f) hh += 360.0f; + + h = (int)Math.Round(hh); + h = (h % 360 + 360) % 360; + } + } +}
\ No newline at end of file diff --git a/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Core/Data/PlayerInfo.cs b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Core/Data/PlayerInfo.cs index 4b7030c..44ab51b 100644 --- a/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Core/Data/PlayerInfo.cs +++ b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Core/Data/PlayerInfo.cs @@ -1,6 +1,19 @@ namespace NoGamepadsSharp_Data.Data; -public class PlayerInfo +public struct PlayerInfo { + public PlayerAccount Account; + public PlayerCustomize Customize; + public struct PlayerCustomize + { + public String Nickname; + public HsvColor Color; + } + + public struct PlayerAccount + { + public String Id; + public String Hash; + } }
\ No newline at end of file diff --git a/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Core/obj/Debug/net8.0/NoGamepadsSharp_Core.AssemblyInfo.cs b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Core/obj/Debug/net8.0/NoGamepadsSharp_Core.AssemblyInfo.cs index e280404..9a403d4 100644 --- a/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Core/obj/Debug/net8.0/NoGamepadsSharp_Core.AssemblyInfo.cs +++ b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Core/obj/Debug/net8.0/NoGamepadsSharp_Core.AssemblyInfo.cs @@ -13,7 +13,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("NoGamepadsSharp_Core")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+5a244311d5c9c42b33a49f3cafa7f20017d10305")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+7bf8e1f24f95d87e1a30765b1904473cf75b435b")] [assembly: System.Reflection.AssemblyProductAttribute("NoGamepadsSharp_Core")] [assembly: System.Reflection.AssemblyTitleAttribute("NoGamepadsSharp_Core")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Core/obj/Debug/net8.0/NoGamepadsSharp_Core.AssemblyInfoInputs.cache b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Core/obj/Debug/net8.0/NoGamepadsSharp_Core.AssemblyInfoInputs.cache index fcd212a..b65f543 100644 --- a/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Core/obj/Debug/net8.0/NoGamepadsSharp_Core.AssemblyInfoInputs.cache +++ b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Core/obj/Debug/net8.0/NoGamepadsSharp_Core.AssemblyInfoInputs.cache @@ -1 +1 @@ -bc71f64338ad3af16c57c59d81f837b950bdf63c0e441a498b072048977de1c7 +a6b869bd9da6a1765cbae4ac831af005406c2755ca688e375f929ab2317f8c28 diff --git a/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/Program.cs b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/Program.cs index e5dff12..4f9a31c 100644 --- a/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/Program.cs +++ b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/Program.cs @@ -1,3 +1,12 @@ -// See https://aka.ms/new-console-template for more information +using System.Runtime.InteropServices; -Console.WriteLine("Hello, World!");
\ No newline at end of file +namespace NoGamepadsSharp_Execute +{ + public class Program + { + public static void Main(string[] args) + { + + } + } +}
\ No newline at end of file diff --git a/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/bin/Debug/net8.0/NoGamepadsSharp_Execute.deps.json b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/bin/Debug/net8.0/NoGamepadsSharp_Execute.deps.json new file mode 100644 index 0000000..7ec60d1 --- /dev/null +++ b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/bin/Debug/net8.0/NoGamepadsSharp_Execute.deps.json @@ -0,0 +1,23 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v8.0", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v8.0": { + "NoGamepadsSharp_Execute/1.0.0": { + "runtime": { + "NoGamepadsSharp_Execute.dll": {} + } + } + } + }, + "libraries": { + "NoGamepadsSharp_Execute/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + } + } +}
\ No newline at end of file diff --git a/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/bin/Debug/net8.0/NoGamepadsSharp_Execute.dll b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/bin/Debug/net8.0/NoGamepadsSharp_Execute.dll Binary files differnew file mode 100644 index 0000000..7304713 --- /dev/null +++ b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/bin/Debug/net8.0/NoGamepadsSharp_Execute.dll diff --git a/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/bin/Debug/net8.0/NoGamepadsSharp_Execute.exe b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/bin/Debug/net8.0/NoGamepadsSharp_Execute.exe Binary files differnew file mode 100644 index 0000000..1aed8a6 --- /dev/null +++ b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/bin/Debug/net8.0/NoGamepadsSharp_Execute.exe diff --git a/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/bin/Debug/net8.0/NoGamepadsSharp_Execute.pdb b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/bin/Debug/net8.0/NoGamepadsSharp_Execute.pdb Binary files differnew file mode 100644 index 0000000..f0bffa1 --- /dev/null +++ b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/bin/Debug/net8.0/NoGamepadsSharp_Execute.pdb diff --git a/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/bin/Debug/net8.0/NoGamepadsSharp_Execute.runtimeconfig.json b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/bin/Debug/net8.0/NoGamepadsSharp_Execute.runtimeconfig.json new file mode 100644 index 0000000..becfaea --- /dev/null +++ b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/bin/Debug/net8.0/NoGamepadsSharp_Execute.runtimeconfig.json @@ -0,0 +1,12 @@ +{ + "runtimeOptions": { + "tfm": "net8.0", + "framework": { + "name": "Microsoft.NETCore.App", + "version": "8.0.0" + }, + "configProperties": { + "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false + } + } +}
\ No newline at end of file diff --git a/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/bin/Debug/net8.0/nogamepads_lib_c.dll b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/bin/Debug/net8.0/nogamepads_lib_c.dll Binary files differnew file mode 100644 index 0000000..1dcd807 --- /dev/null +++ b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/bin/Debug/net8.0/nogamepads_lib_c.dll diff --git a/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/obj/Debug/net8.0/NoGamepadsSharp_Execute.AssemblyInfo.cs b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/obj/Debug/net8.0/NoGamepadsSharp_Execute.AssemblyInfo.cs index 7d24d7e..1cd6707 100644 --- a/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/obj/Debug/net8.0/NoGamepadsSharp_Execute.AssemblyInfo.cs +++ b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/obj/Debug/net8.0/NoGamepadsSharp_Execute.AssemblyInfo.cs @@ -13,7 +13,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("NoGamepadsSharp_Execute")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+5a244311d5c9c42b33a49f3cafa7f20017d10305")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+7bf8e1f24f95d87e1a30765b1904473cf75b435b")] [assembly: System.Reflection.AssemblyProductAttribute("NoGamepadsSharp_Execute")] [assembly: System.Reflection.AssemblyTitleAttribute("NoGamepadsSharp_Execute")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/obj/Debug/net8.0/NoGamepadsSharp_Execute.AssemblyInfoInputs.cache b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/obj/Debug/net8.0/NoGamepadsSharp_Execute.AssemblyInfoInputs.cache index 41b15d2..9d55bff 100644 --- a/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/obj/Debug/net8.0/NoGamepadsSharp_Execute.AssemblyInfoInputs.cache +++ b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/obj/Debug/net8.0/NoGamepadsSharp_Execute.AssemblyInfoInputs.cache @@ -1 +1 @@ -8708e46ad6cb9888fb34fdbff384cd1402172cc10485179fa8fd4fcc3810f7ef +04ec6d515d7009e3fadb88848dbf20ac4996198345493ab6f51b427aa75bafe7 diff --git a/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/obj/Debug/net8.0/NoGamepadsSharp_Execute.csproj.CoreCompileInputs.cache b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/obj/Debug/net8.0/NoGamepadsSharp_Execute.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..b8d2bb6 --- /dev/null +++ b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/obj/Debug/net8.0/NoGamepadsSharp_Execute.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +08b6a6e0c0f5c70b73eb166c3425ecd1b8254db5cb3da53ddf331a4e9ececa64 diff --git a/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/obj/Debug/net8.0/NoGamepadsSharp_Execute.csproj.FileListAbsolute.txt b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/obj/Debug/net8.0/NoGamepadsSharp_Execute.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..60ba01a --- /dev/null +++ b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/obj/Debug/net8.0/NoGamepadsSharp_Execute.csproj.FileListAbsolute.txt @@ -0,0 +1,15 @@ +D:\TINP\NoGamepads\core_csharp\NoGamepadsSharp\NoGamepadsSharp_Execute\bin\Debug\net8.0\NoGamepadsSharp_Execute.exe +D:\TINP\NoGamepads\core_csharp\NoGamepadsSharp\NoGamepadsSharp_Execute\bin\Debug\net8.0\NoGamepadsSharp_Execute.deps.json +D:\TINP\NoGamepads\core_csharp\NoGamepadsSharp\NoGamepadsSharp_Execute\bin\Debug\net8.0\NoGamepadsSharp_Execute.runtimeconfig.json +D:\TINP\NoGamepads\core_csharp\NoGamepadsSharp\NoGamepadsSharp_Execute\bin\Debug\net8.0\NoGamepadsSharp_Execute.dll +D:\TINP\NoGamepads\core_csharp\NoGamepadsSharp\NoGamepadsSharp_Execute\bin\Debug\net8.0\NoGamepadsSharp_Execute.pdb +D:\TINP\NoGamepads\core_csharp\NoGamepadsSharp\NoGamepadsSharp_Execute\obj\Debug\net8.0\NoGamepadsSharp_Execute.GeneratedMSBuildEditorConfig.editorconfig +D:\TINP\NoGamepads\core_csharp\NoGamepadsSharp\NoGamepadsSharp_Execute\obj\Debug\net8.0\NoGamepadsSharp_Execute.AssemblyInfoInputs.cache +D:\TINP\NoGamepads\core_csharp\NoGamepadsSharp\NoGamepadsSharp_Execute\obj\Debug\net8.0\NoGamepadsSharp_Execute.AssemblyInfo.cs +D:\TINP\NoGamepads\core_csharp\NoGamepadsSharp\NoGamepadsSharp_Execute\obj\Debug\net8.0\NoGamepadsSharp_Execute.csproj.CoreCompileInputs.cache +D:\TINP\NoGamepads\core_csharp\NoGamepadsSharp\NoGamepadsSharp_Execute\obj\Debug\net8.0\NoGamepadsSharp_Execute.sourcelink.json +D:\TINP\NoGamepads\core_csharp\NoGamepadsSharp\NoGamepadsSharp_Execute\obj\Debug\net8.0\NoGamepadsSharp_Execute.dll +D:\TINP\NoGamepads\core_csharp\NoGamepadsSharp\NoGamepadsSharp_Execute\obj\Debug\net8.0\refint\NoGamepadsSharp_Execute.dll +D:\TINP\NoGamepads\core_csharp\NoGamepadsSharp\NoGamepadsSharp_Execute\obj\Debug\net8.0\NoGamepadsSharp_Execute.pdb +D:\TINP\NoGamepads\core_csharp\NoGamepadsSharp\NoGamepadsSharp_Execute\obj\Debug\net8.0\NoGamepadsSharp_Execute.genruntimeconfig.cache +D:\TINP\NoGamepads\core_csharp\NoGamepadsSharp\NoGamepadsSharp_Execute\obj\Debug\net8.0\ref\NoGamepadsSharp_Execute.dll diff --git a/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/obj/Debug/net8.0/NoGamepadsSharp_Execute.dll b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/obj/Debug/net8.0/NoGamepadsSharp_Execute.dll Binary files differnew file mode 100644 index 0000000..7304713 --- /dev/null +++ b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/obj/Debug/net8.0/NoGamepadsSharp_Execute.dll diff --git a/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/obj/Debug/net8.0/NoGamepadsSharp_Execute.genruntimeconfig.cache b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/obj/Debug/net8.0/NoGamepadsSharp_Execute.genruntimeconfig.cache new file mode 100644 index 0000000..d1d6363 --- /dev/null +++ b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/obj/Debug/net8.0/NoGamepadsSharp_Execute.genruntimeconfig.cache @@ -0,0 +1 @@ +747af723e27e441c874613b2ee11f095ebffaa1343df438ff5c28c1abeefb1b1 diff --git a/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/obj/Debug/net8.0/NoGamepadsSharp_Execute.pdb b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/obj/Debug/net8.0/NoGamepadsSharp_Execute.pdb Binary files differnew file mode 100644 index 0000000..f0bffa1 --- /dev/null +++ b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/obj/Debug/net8.0/NoGamepadsSharp_Execute.pdb diff --git a/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/obj/Debug/net8.0/NoGamepadsSharp_Execute.sourcelink.json b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/obj/Debug/net8.0/NoGamepadsSharp_Execute.sourcelink.json new file mode 100644 index 0000000..9ab27c4 --- /dev/null +++ b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/obj/Debug/net8.0/NoGamepadsSharp_Execute.sourcelink.json @@ -0,0 +1 @@ +{"documents":{"D:\\TINP\\NoGamepads\\*":"https://raw.githubusercontent.com/CatilGrass/NoGamepads/7bf8e1f24f95d87e1a30765b1904473cf75b435b/*"}}
\ No newline at end of file diff --git a/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/obj/Debug/net8.0/apphost.exe b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/obj/Debug/net8.0/apphost.exe Binary files differnew file mode 100644 index 0000000..1aed8a6 --- /dev/null +++ b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/obj/Debug/net8.0/apphost.exe diff --git a/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/obj/Debug/net8.0/ref/NoGamepadsSharp_Execute.dll b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/obj/Debug/net8.0/ref/NoGamepadsSharp_Execute.dll Binary files differnew file mode 100644 index 0000000..1a99951 --- /dev/null +++ b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/obj/Debug/net8.0/ref/NoGamepadsSharp_Execute.dll diff --git a/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/obj/Debug/net8.0/refint/NoGamepadsSharp_Execute.dll b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/obj/Debug/net8.0/refint/NoGamepadsSharp_Execute.dll Binary files differnew file mode 100644 index 0000000..1a99951 --- /dev/null +++ b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/obj/Debug/net8.0/refint/NoGamepadsSharp_Execute.dll diff --git a/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/obj/rider.project.model.nuget.info b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/obj/rider.project.model.nuget.info new file mode 100644 index 0000000..91b84e6 --- /dev/null +++ b/core_csharp/NoGamepadsSharp/NoGamepadsSharp_Execute/obj/rider.project.model.nuget.info @@ -0,0 +1 @@ +17483964212879694
\ No newline at end of file diff --git a/release/0.1.0/bin/nogpadc.exe b/release/0.1.0/bin/nogpadc.exe Binary files differindex 5cf21ea..5fea05c 100644 --- a/release/0.1.0/bin/nogpadc.exe +++ b/release/0.1.0/bin/nogpadc.exe diff --git a/release/0.1.0/bin/nogpads.exe b/release/0.1.0/bin/nogpads.exe Binary files differindex 03fe069..9774267 100644 --- a/release/0.1.0/bin/nogpads.exe +++ b/release/0.1.0/bin/nogpads.exe diff --git a/release/0.1.0/bridge/nogamepads.h b/release/0.1.0/bridge/nogamepads.h index 959475d..997b73d 100644 --- a/release/0.1.0/bridge/nogamepads.h +++ b/release/0.1.0/bridge/nogamepads.h @@ -30,6 +30,32 @@ typedef enum LeaveReasonData { YouAreBanned, } LeaveReasonData; +typedef struct GameProfileC { + const char *game_name; + const char *game_description; + const char *organization; + const char *version; + const char *website; + const char *email; +} GameProfileC; + +typedef struct PlayerInfoC { + const char *account_id; + const char *account_hash; + const char *customize_nickname; + int32_t customize_color_hue; + double customize_color_saturation; + double customize_color_value; +} PlayerInfoC; + +typedef struct PadClientC { + const char *target_address; + uint16_t target_port; + struct PlayerInfoC bind_player; + bool enable_console; + bool quiet; +} PadClientC; + typedef struct KeyData { uint8_t key; } KeyData; @@ -57,10 +83,10 @@ typedef union CtrlMsgCUnion { struct StrData str; } CtrlMsgCUnion; -typedef struct CtrlMsgC { +typedef struct ControlMessageC { enum CtrlMsgCTag tag; union CtrlMsgCUnion data; -} CtrlMsgC; +} ControlMessageC; typedef union GameMsgCUnion { void *nul; @@ -68,60 +94,66 @@ typedef union GameMsgCUnion { enum LeaveReasonData reason; } GameMsgCUnion; -typedef struct GameMsgC { +typedef struct GameMessageC { enum GameMsgCTag tag; union GameMsgCUnion data; -} GameMsgC; +} GameMessageC; typedef struct PlayerList { - PlayerInfo *players; + struct PlayerInfoC *players; uintptr_t len; uintptr_t capacity; } PlayerList; -GameProfile *init_game_profile(void); +struct GameProfileC init_game_profile(void); -void set_game_profile_name(GameProfile *game_profile, const char *value); +struct GameProfileC set_game_profile_name(struct GameProfileC game_profile, const char *value); -void set_game_profile_description(GameProfile *game_profile, const char *value); +struct GameProfileC set_game_profile_description(struct GameProfileC game_profile, + const char *value); -void set_game_profile_organization(GameProfile *game_profile, const char *value); +struct GameProfileC set_game_profile_organization(struct GameProfileC game_profile, + const char *value); -void set_game_profile_version(GameProfile *game_profile, const char *value); +struct GameProfileC set_game_profile_version(struct GameProfileC game_profile, const char *value); -void set_game_profile_website(GameProfile *game_profile, const char *value); +struct GameProfileC set_game_profile_website(struct GameProfileC game_profile, const char *value); -void set_game_profile_email(GameProfile *game_profile, const char *value); +struct GameProfileC set_game_profile_email(struct GameProfileC game_profile, const char *value); -PlayerInfo *init_player_info(void); +struct PlayerInfoC init_player_info(void); -void set_player_info_account(PlayerInfo *info, const char *id, const char *password); +struct PlayerInfoC set_player_info_account(struct PlayerInfoC info, + const char *id, + const char *password); -void set_player_info_color(PlayerInfo *info, int32_t h, double s, double v); +struct PlayerInfoC set_player_info_color(struct PlayerInfoC info, int32_t h, double s, double v); -void set_player_info_nickname(PlayerInfo *info, const char *nickname); +struct PlayerInfoC set_player_info_nickname(struct PlayerInfoC info, const char *nickname); uint16_t get_default_port(void); -PadClient *init_client(const char *address); +struct PadClientC init_client(const char *address); + +struct PadClientC init_client_with_port(const char *address, uint16_t port); -PadClient *init_client_with_port(const char *address, uint16_t port); +struct PadClientC set_client_quiet(struct PadClientC client); -void set_client_quiet(PadClient *client); +struct PadClientC enable_client_console(struct PadClientC client); -void enable_client_console(PadClient *client); +struct PadClientC bind_player_to_client(struct PadClientC client, struct PlayerInfoC info); -void bind_player_to_client(PadClient *client, PlayerInfo *info); +PadClient *complete(struct PadClientC client); void connect_client_to_server(PadClient *client); void exit_client_from_server(const PadClient *client); -void put_a_msg_to_server(const PadClient *client, struct CtrlMsgC msg); +void put_a_msg_to_server(const PadClient *client, struct ControlMessageC msg); -struct GameMsgC pop_a_msg_from_server(const PadClient *client); +struct GameMessageC pop_a_msg_from_server(const PadClient *client); -struct GameMsgC pop_msg_from_server_or(const PadClient *client, struct GameMsgC or); +struct GameMessageC pop_msg_from_server_or(const PadClient *client, struct GameMessageC or); PadServer *init_server(const char *address); @@ -131,7 +163,7 @@ void set_server_quiet(PadServer *server); void enable_server_console(PadServer *server); -void bind_profile_to_server(PadServer *server, GameProfile *profile); +void bind_profile_to_server(PadServer *server, const struct GameProfileC *profile); void start_server(PadServer *server); @@ -143,25 +175,27 @@ void unlock_game_on_server(PadServer *server); bool is_server_game_locked(PadServer *server); -void put_a_msg_to_player(PadServer *server, struct GameMsgC msg, const PlayerInfo *player); +void put_a_msg_to_player(PadServer *server, + struct GameMessageC msg, + const struct PlayerInfoC *player); -void put_msg_to_all_players(PadServer *server, struct GameMsgC msg); +void put_msg_to_all_players(PadServer *server, struct GameMessageC msg); -struct CtrlMsgC pop_a_msg_from_player(PadServer *server, const PlayerInfo *player); +struct ControlMessageC pop_a_msg_from_player(PadServer *server, const struct PlayerInfoC *player); -struct CtrlMsgC pop_msg_from_player_or(PadServer *server, - const PlayerInfo *player, - struct CtrlMsgC or); +struct ControlMessageC pop_msg_from_player_or(PadServer *server, + const struct PlayerInfoC *player, + struct ControlMessageC or); -bool is_player_online(PadServer *server, const PlayerInfo *player); +bool is_player_online(PadServer *server, const struct PlayerInfoC *player); -bool is_player_banned(PadServer *server, const PlayerInfo *player); +bool is_player_banned(PadServer *server, const struct PlayerInfoC *player); -void kick_player(PadServer *server, const PlayerInfo *player); +void kick_player(PadServer *server, const struct PlayerInfoC *player); -void ban_player(PadServer *server, const PlayerInfo *player); +void ban_player(PadServer *server, const struct PlayerInfoC *player); -void pardon_player(PadServer *server, const PlayerInfo *player); +void pardon_player(PadServer *server, const struct PlayerInfoC *player); struct PlayerList list_online_players(PadServer *server); diff --git a/release/0.1.0/bridge/nogamepads_cpp.h b/release/0.1.0/bridge/nogamepads_cpp.h index ab27981..77469fb 100644 --- a/release/0.1.0/bridge/nogamepads_cpp.h +++ b/release/0.1.0/bridge/nogamepads_cpp.h @@ -35,6 +35,32 @@ enum class LeaveReasonData { YouAreBanned, }; +struct GameProfileC { + const char *game_name; + const char *game_description; + const char *organization; + const char *version; + const char *website; + const char *email; +}; + +struct PlayerInfoC { + const char *account_id; + const char *account_hash; + const char *customize_nickname; + int32_t customize_color_hue; + double customize_color_saturation; + double customize_color_value; +}; + +struct PadClientC { + const char *target_address; + uint16_t target_port; + PlayerInfoC bind_player; + bool enable_console; + bool quiet; +}; + struct KeyData { uint8_t key; }; @@ -62,7 +88,7 @@ union CtrlMsgCUnion { StrData str; }; -struct CtrlMsgC { +struct ControlMessageC { CtrlMsgCTag tag; CtrlMsgCUnion data; }; @@ -73,62 +99,64 @@ union GameMsgCUnion { LeaveReasonData reason; }; -struct GameMsgC { +struct GameMessageC { GameMsgCTag tag; GameMsgCUnion data; }; struct PlayerList { - PlayerInfo *players; + PlayerInfoC *players; uintptr_t len; uintptr_t capacity; }; extern "C" { -GameProfile *init_game_profile(); +GameProfileC init_game_profile(); -void set_game_profile_name(GameProfile *game_profile, const char *value); +GameProfileC set_game_profile_name(GameProfileC game_profile, const char *value); -void set_game_profile_description(GameProfile *game_profile, const char *value); +GameProfileC set_game_profile_description(GameProfileC game_profile, const char *value); -void set_game_profile_organization(GameProfile *game_profile, const char *value); +GameProfileC set_game_profile_organization(GameProfileC game_profile, const char *value); -void set_game_profile_version(GameProfile *game_profile, const char *value); +GameProfileC set_game_profile_version(GameProfileC game_profile, const char *value); -void set_game_profile_website(GameProfile *game_profile, const char *value); +GameProfileC set_game_profile_website(GameProfileC game_profile, const char *value); -void set_game_profile_email(GameProfile *game_profile, const char *value); +GameProfileC set_game_profile_email(GameProfileC game_profile, const char *value); -PlayerInfo *init_player_info(); +PlayerInfoC init_player_info(); -void set_player_info_account(PlayerInfo *info, const char *id, const char *password); +PlayerInfoC set_player_info_account(PlayerInfoC info, const char *id, const char *password); -void set_player_info_color(PlayerInfo *info, int32_t h, double s, double v); +PlayerInfoC set_player_info_color(PlayerInfoC info, int32_t h, double s, double v); -void set_player_info_nickname(PlayerInfo *info, const char *nickname); +PlayerInfoC set_player_info_nickname(PlayerInfoC info, const char *nickname); uint16_t get_default_port(); -PadClient *init_client(const char *address); +PadClientC init_client(const char *address); + +PadClientC init_client_with_port(const char *address, uint16_t port); -PadClient *init_client_with_port(const char *address, uint16_t port); +PadClientC set_client_quiet(PadClientC client); -void set_client_quiet(PadClient *client); +PadClientC enable_client_console(PadClientC client); -void enable_client_console(PadClient *client); +PadClientC bind_player_to_client(PadClientC client, PlayerInfoC info); -void bind_player_to_client(PadClient *client, PlayerInfo *info); +PadClient *complete(PadClientC client); void connect_client_to_server(PadClient *client); void exit_client_from_server(const PadClient *client); -void put_a_msg_to_server(const PadClient *client, CtrlMsgC msg); +void put_a_msg_to_server(const PadClient *client, ControlMessageC msg); -GameMsgC pop_a_msg_from_server(const PadClient *client); +GameMessageC pop_a_msg_from_server(const PadClient *client); -GameMsgC pop_msg_from_server_or(const PadClient *client, GameMsgC or); +GameMessageC pop_msg_from_server_or(const PadClient *client, GameMessageC or); PadServer *init_server(const char *address); @@ -138,7 +166,7 @@ void set_server_quiet(PadServer *server); void enable_server_console(PadServer *server); -void bind_profile_to_server(PadServer *server, GameProfile *profile); +void bind_profile_to_server(PadServer *server, const GameProfileC *profile); void start_server(PadServer *server); @@ -150,23 +178,25 @@ void unlock_game_on_server(PadServer *server); bool is_server_game_locked(PadServer *server); -void put_a_msg_to_player(PadServer *server, GameMsgC msg, const PlayerInfo *player); +void put_a_msg_to_player(PadServer *server, GameMessageC msg, const PlayerInfoC *player); -void put_msg_to_all_players(PadServer *server, GameMsgC msg); +void put_msg_to_all_players(PadServer *server, GameMessageC msg); -CtrlMsgC pop_a_msg_from_player(PadServer *server, const PlayerInfo *player); +ControlMessageC pop_a_msg_from_player(PadServer *server, const PlayerInfoC *player); -CtrlMsgC pop_msg_from_player_or(PadServer *server, const PlayerInfo *player, CtrlMsgC or); +ControlMessageC pop_msg_from_player_or(PadServer *server, + const PlayerInfoC *player, + ControlMessageC or); -bool is_player_online(PadServer *server, const PlayerInfo *player); +bool is_player_online(PadServer *server, const PlayerInfoC *player); -bool is_player_banned(PadServer *server, const PlayerInfo *player); +bool is_player_banned(PadServer *server, const PlayerInfoC *player); -void kick_player(PadServer *server, const PlayerInfo *player); +void kick_player(PadServer *server, const PlayerInfoC *player); -void ban_player(PadServer *server, const PlayerInfo *player); +void ban_player(PadServer *server, const PlayerInfoC *player); -void pardon_player(PadServer *server, const PlayerInfo *player); +void pardon_player(PadServer *server, const PlayerInfoC *player); PlayerList list_online_players(PadServer *server); diff --git a/release/0.1.0/bridge/nogamepads_lib_c.dll b/release/0.1.0/bridge/nogamepads_lib_c.dll Binary files differindex f9fa81d..1dcd807 100644 --- a/release/0.1.0/bridge/nogamepads_lib_c.dll +++ b/release/0.1.0/bridge/nogamepads_lib_c.dll |
