aboutsummaryrefslogtreecommitdiff
path: root/bindings/c/src/service_c
diff options
context:
space:
mode:
Diffstat (limited to 'bindings/c/src/service_c')
-rw-r--r--bindings/c/src/service_c/common.rs4
-rw-r--r--bindings/c/src/service_c/mod.rs4
-rw-r--r--bindings/c/src/service_c/padclient.rs126
-rw-r--r--bindings/c/src/service_c/padserver.rs174
4 files changed, 0 insertions, 308 deletions
diff --git a/bindings/c/src/service_c/common.rs b/bindings/c/src/service_c/common.rs
deleted file mode 100644
index 8b13da0..0000000
--- a/bindings/c/src/service_c/common.rs
+++ /dev/null
@@ -1,4 +0,0 @@
-use nogamepads_lib_rs::DEFAULT_PORT;
-
-#[unsafe(no_mangle)]
-pub extern "C" fn get_default_port() -> u16 { DEFAULT_PORT } \ No newline at end of file
diff --git a/bindings/c/src/service_c/mod.rs b/bindings/c/src/service_c/mod.rs
deleted file mode 100644
index 674baf7..0000000
--- a/bindings/c/src/service_c/mod.rs
+++ /dev/null
@@ -1,4 +0,0 @@
-pub mod common;
-
-pub mod padclient;
-pub mod padserver; \ No newline at end of file
diff --git a/bindings/c/src/service_c/padclient.rs b/bindings/c/src/service_c/padclient.rs
deleted file mode 100644
index b7bac43..0000000
--- a/bindings/c/src/service_c/padclient.rs
+++ /dev/null
@@ -1,126 +0,0 @@
-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;
-
-#[repr(C)]
-#[derive(Copy, Clone)]
-#[allow(unused_imports)]
-pub struct PadClientC {
- pub target_address: *const c_char,
- pub target_port: u16,
- pub bind_player: PlayerInfoC,
- pub enable_console: bool,
- pub 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) -> 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));
- 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) -> 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));
- 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 enable_client_console(client: PadClientC) -> PadClientC {
- let mut raw: PadClient = client.into();
- raw.enable_console().into()
-}
-
-#[unsafe(no_mangle)]
-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 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) {
- let client = unsafe { Box::from_raw(client) };
- client.connect();
-}
-
-#[unsafe(no_mangle)]
-pub extern "C" fn exit_client_from_server(client: &PadClient) {
- client.exit_server();
-}
-
-// 消息管理
-
-#[unsafe(no_mangle)]
-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) -> 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: GameMessageC) -> GameMessageC {
- client.pop_msg_or(or.into()).into()
-} \ No newline at end of file
diff --git a/bindings/c/src/service_c/padserver.rs b/bindings/c/src/service_c/padserver.rs
deleted file mode 100644
index 98c5792..0000000
--- a/bindings/c/src/service_c/padserver.rs
+++ /dev/null
@@ -1,174 +0,0 @@
-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_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};
-
-// 构建
-
-#[unsafe(no_mangle)]
-pub extern "C" fn init_server(address: *const c_char) -> *mut PadServer {
- 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();
- server.addr(IpAddr::from(addr_v4), DEFAULT_PORT);
- box_into_raw!(server)
-}
-
-#[unsafe(no_mangle)]
-pub extern "C" fn init_server_with_port(address: *const c_char, port: u16) -> *mut PadServer {
- 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();
- server.addr(IpAddr::from(addr_v4), port);
- box_into_raw!(server)
-}
-
-#[unsafe(no_mangle)]
-pub extern "C" fn set_server_quiet(server: &mut PadServer) {
- server.quiet();
-}
-
-#[unsafe(no_mangle)]
-pub extern "C" fn enable_server_console(server: &mut PadServer) {
- server.enable_console();
-}
-
-#[unsafe(no_mangle)]
-pub extern "C" fn bind_profile_to_server(server: &mut PadServer, profile: &GameProfileC) {
- server.put_profile(profile.clone().into());
-}
-
-// 状态控制
-
-#[unsafe(no_mangle)]
-pub extern "C" fn start_server(server: *mut PadServer) {
- let server = unsafe { Box::from_raw(server) };
- let arc = Arc::new(server.as_ref().clone());
- PadServer::start_server(arc);
-}
-
-#[unsafe(no_mangle)]
-pub extern "C" fn stop_server(server: *mut PadServer) {
- let server = unsafe { Box::from_raw(server) };
- server.stop_server();
-}
-
-#[unsafe(no_mangle)]
-pub extern "C" fn lock_game_on_server(server: *mut PadServer) {
- let server = unsafe { Box::from_raw(server) };
- server.lock_game();
-}
-
-#[unsafe(no_mangle)]
-pub extern "C" fn unlock_game_on_server(server: *mut PadServer) {
- let server = unsafe { Box::from_raw(server) };
- server.unlock_game();
-}
-
-#[unsafe(no_mangle)]
-pub extern "C" fn is_server_game_locked(server: *mut PadServer) -> bool {
- let server = unsafe { Box::from_raw(server) };
- server.is_game_locked()
-}
-
-// 消息管理
-#[unsafe(no_mangle)]
-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.into());
-}
-
-#[unsafe(no_mangle)]
-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(server: *mut PadServer) -> ControlMessageC {
-// let server = unsafe { Box::from_raw(server) };
-// let msg = server.pop_a_msg();
-// if msg.is_some() {
-// let (player, msg) = msg.unwrap();
-// }
-// }
-
-// 玩家管理
-#[unsafe(no_mangle)]
-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.into())
-}
-
-#[unsafe(no_mangle)]
-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.into())
-}
-
-#[unsafe(no_mangle)]
-pub extern "C" fn kick_player(server: *mut PadServer, player: &PlayerInfoC) {
- let server = unsafe { Box::from_raw(server) };
- server.kick_player(player.into());
-}
-
-#[unsafe(no_mangle)]
-pub extern "C" fn ban_player(server: *mut PadServer, player: &PlayerInfoC) {
- let server = unsafe { Box::from_raw(server) };
- server.ban_player(player.into());
-}
-
-#[unsafe(no_mangle)]
-pub extern "C" fn pardon_player(server: *mut PadServer, player: &PlayerInfoC) {
- let server = unsafe { Box::from_raw(server) };
- server.pardon_player(player.into());
-}
-
-#[unsafe(no_mangle)]
-pub extern "C" fn list_online_players(server: *mut PadServer) -> PlayerList {
- let server = unsafe { Box::from_raw(server) };
- let list = server.list_players();
- process_list_result(list)
-}
-
-#[unsafe(no_mangle)]
-pub extern "C" fn list_banned_players(server: *mut PadServer) -> PlayerList {
- let server = unsafe { Box::from_raw(server) };
- let list = server.list_players_banned();
- process_list_result(list)
-}
-
-fn process_list_result(list: Result<Vec<PlayerInfo>, PoisonError<MutexGuard<HashMap<String, PlayerInfo>>>>) -> PlayerList {
- let result : Vec<PlayerInfo>;
- if list.is_ok() {
- result = list.unwrap();
- } else {
- result = vec![];
- }
- let mut result_c: Vec<PlayerInfoC> = Vec::new();
- for item in result {
- result_c.push(item.into());
- }
-
- let mut vec = result_c.into_boxed_slice();
- let ptr = vec.as_mut_ptr();
- let len = vec.len();
- let capacity = vec.len();
-
- PlayerList {
- players: ptr,
- len,
- capacity
- }
-} \ No newline at end of file