aboutsummaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/examples/start_server_console.rs7
-rw-r--r--core/src/pad_io/client.rs41
-rw-r--r--core/src/pad_io/client_debug_cli.rs7
-rw-r--r--core/src/pad_io/server.rs25
-rw-r--r--core/src/pad_io/server_debug_cli.rs16
5 files changed, 47 insertions, 49 deletions
diff --git a/core/examples/start_server_console.rs b/core/examples/start_server_console.rs
index e643390..4b34cdd 100644
--- a/core/examples/start_server_console.rs
+++ b/core/examples/start_server_console.rs
@@ -1,7 +1,7 @@
-use std::net::{IpAddr, Ipv4Addr};
-use nogamepads_core::DEFAULT_PORT;
use nogamepads_core::pad_data::game_profile::game_profile::GameProfile;
use nogamepads_core::pad_io::server::nogamepads_server::PadServer;
+use nogamepads_core::DEFAULT_PORT;
+use std::net::{IpAddr, Ipv4Addr};
fn main() {
@@ -23,8 +23,9 @@ fn main() {
.to_owned()
)
.enable_console()
+ // .quiet()
.build();
// 运行服务端
- server.start_listening();
+ server.start_server();
} \ No newline at end of file
diff --git a/core/src/pad_io/client.rs b/core/src/pad_io/client.rs
index 2969742..bd8bc2c 100644
--- a/core/src/pad_io/client.rs
+++ b/core/src/pad_io/client.rs
@@ -1,4 +1,5 @@
pub mod nogamepads_client {
+ use std::collections::VecDeque;
use crate::pad_data::pad_messages::nogamepads_message_transfer::{read_msg, send_msg};
use crate::pad_data::pad_messages::nogamepads_messages::{ConnectionCallbackMessage, ConnectionErrorType, ConnectionMessage, ControlMessage, GameMessage, LeaveReason};
use crate::pad_data::pad_player_info::nogamepads_player_info::PlayerInfo;
@@ -13,15 +14,16 @@ pub mod nogamepads_client {
use tokio::io::{AsyncReadExt, AsyncWriteExt, ReadHalf, WriteHalf};
use tokio::net::TcpStream;
use tokio::{io, spawn};
- use nogamepads::debug_console::debug_console::read_cli;
- use nogamepads::logger::logger_build;
+ use nogamepads::console_utils::debug_console::read_cli;
+ use nogamepads::convert_utils::convert_deque_to_vec;
+ use nogamepads::logger_utils::logger_build;
use crate::pad_io::client_debug_cli::{process_debug_cmd, Pcc};
use crate::DEFAULT_PORT;
use crate::pad_data::game_profile::game_profile::GameProfile;
use crate::pad_data::pad_messages::nogamepads_message_encoder::NgpdMessageEncoder;
- type WriteList = Arc<Mutex<Vec<ControlMessage>>>;
- type ReadList = Arc<Mutex<Vec<GameMessage>>>;
+ type WriteList = Arc<Mutex<VecDeque<ControlMessage>>>;
+ type ReadList = Arc<Mutex<VecDeque<GameMessage>>>;
pub struct PadClient {
@@ -108,20 +110,16 @@ pub mod nogamepads_client {
pub fn put_msg(&self, msg: ControlMessage) {
- {
- let mut guard = self.write_list.lock().unwrap();
- guard.push(msg);
- }
+ let mut guard = self.write_list.lock().unwrap();
+ guard.push_back(msg);
}
pub fn pop_a_msg(&self) -> Option<GameMessage> {
- {
- let mut guard = self.read_list.lock().unwrap();
- if ! guard.is_empty() {
- Some(guard.remove(0))
- } else {
- None
- }
+ let mut guard = self.read_list.lock().unwrap();
+ if !guard.is_empty() {
+ guard.pop_front()
+ } else {
+ None
}
}
@@ -132,7 +130,7 @@ pub mod nogamepads_client {
pub fn list_received(&self) -> Vec<GameMessage> {
match self.read_list.lock() {
Ok(guard) => {
- guard.to_vec()
+ convert_deque_to_vec(&guard.to_owned())
}
Err(_) => { Vec::new() }
}
@@ -143,7 +141,7 @@ pub mod nogamepads_client {
impl PadClient {
pub fn connect(self) {
-
+
self.exit.store(false, SeqCst);
// 构建 Logger
@@ -238,7 +236,7 @@ pub mod nogamepads_client {
}
}
- async fn check_server_profile (self: &Arc<Self>, buffer: &mut [u8], addr_str: String) -> Option<GameProfile> {
+ async fn check_server_profile(self: &Arc<Self>, buffer: &mut [u8], addr_str: String) -> Option<GameProfile> {
match TcpStream::connect(&addr_str).await {
Ok(mut stream) => {
send_msg(&mut stream, ConnectionMessage::RequestProfile).await;
@@ -363,7 +361,7 @@ pub mod nogamepads_client {
}
_ => {
info!("{:?}", &msg);
- guard.push(msg);
+ guard.push_back(msg);
}
}
}
@@ -388,9 +386,10 @@ pub mod nogamepads_client {
match lock {
Ok(mut guard) => {
if ! guard.is_empty() {
- msg = Some(guard.remove(0));
+ msg = guard.pop_front();
+ } else {
+ msg = None;
}
- else { msg = None; }
}
Err(_) => {
msg = None;
diff --git a/core/src/pad_io/client_debug_cli.rs b/core/src/pad_io/client_debug_cli.rs
index c95fb94..b34bef5 100644
--- a/core/src/pad_io/client_debug_cli.rs
+++ b/core/src/pad_io/client_debug_cli.rs
@@ -2,6 +2,7 @@ use crate::pad_io::client::nogamepads_client::PadClient;
use crate::pad_data::pad_messages::nogamepads_messages::{ControlMessage, GameMessage};
use clap::{Args, Parser, Subcommand};
use std::sync::Arc;
+use log::info;
/// NoGamePads Client - Cli
#[derive(Parser, Debug)]
@@ -68,15 +69,15 @@ pub fn process_debug_cmd (cmd: Pcc, client: Arc<PadClient>) {
Commands::Received(args) => {
if args.list {
for msg in client.list_received() {
- println!("{:?}", msg);
+ info!("{:?}", msg);
}
} else {
- println!("Total {} messsage(s)!", client.list_received().iter().count());
+ info!("Total {} messsage(s)!", client.list_received().iter().count());
}
}
Commands::Pop(_args) => {
- println!("{:?}", client.pop_msg_or(GameMessage::Err));
+ info!("{:?}", client.pop_msg_or(GameMessage::Err));
}
Commands::Msg(args) => {
diff --git a/core/src/pad_io/server.rs b/core/src/pad_io/server.rs
index c530753..59241f1 100644
--- a/core/src/pad_io/server.rs
+++ b/core/src/pad_io/server.rs
@@ -15,8 +15,9 @@ pub mod nogamepads_server {
use tokio::net::{TcpListener, TcpStream};
use tokio::{io, spawn};
use tokio::runtime::Runtime;
- use nogamepads::debug_console::debug_console::read_cli;
- use nogamepads::logger::logger_build;
+ use nogamepads::console_utils::debug_console::read_cli;
+ use nogamepads::convert_utils::convert_deque_to_vec;
+ use nogamepads::logger_utils::logger_build;
use crate::DEFAULT_PORT;
use crate::pad_data::game_profile::game_profile::GameProfile;
use crate::pad_data::pad_messages::nogamepads_messages::ConnectionErrorType::{ContainSamePlayer, GameLocked, PlayerBanned, WhatTheHell};
@@ -219,7 +220,7 @@ pub mod nogamepads_server {
match guard.get_key_value(player.account.player_hash.as_str()) {
None => { Vec::new() }
Some(result) => {
- Self::convert_deque_to_vec(result.1)
+ convert_deque_to_vec(result.1)
}
}
}
@@ -301,27 +302,18 @@ pub mod nogamepads_server {
Err(err) => Err(err)
}
}
-
- fn convert_deque_to_vec (deque: &VecDeque<ControlMessage>) -> Vec<ControlMessage> {
- let vec_deque_ref = deque;
- let mut vec = Vec::new();
- for item in vec_deque_ref {
- vec.push(item.clone())
- }
- vec
- }
}
// 服务端状态控制
#[allow(dead_code)]
impl PadServer {
- pub fn stop_listening(&self) {
+ pub fn stop_server(&self) {
self.put_msg_to_all(&Leave(ServerClosed));
self.stop.store(true, SeqCst);
}
- pub fn start_listening(self: Arc<Self>) {
+ pub fn start_server(self: Arc<Self>) {
// 构建 Logger
if ! self.quiet {
@@ -476,6 +468,7 @@ pub mod nogamepads_server {
self.set_player_online(&info, true);
// 启动控制循环
+
spawn(Self::long_connection(Arc::clone(&self), stream, info));
},
_ => {
@@ -541,6 +534,7 @@ pub mod nogamepads_server {
.entry(player_hash.clone())
.or_insert_with(VecDeque::new)
.push_back(msg);
+
}
Err(_) => {
}
@@ -549,6 +543,7 @@ pub mod nogamepads_server {
}
Err(e) => {
warn!("Error reading from stream: {}", e);
+
self.set_player_online(&player_info, false);
// 放入一条错误信息到队列,使 write_task 及时发现该玩家离开
@@ -594,6 +589,7 @@ pub mod nogamepads_server {
let msg = msg.unwrap();
match &writer.write_all(NgpdMessageEncoder::en(&msg).as_slice()).await {
Ok(_) => {
+
info!("Sent {:?} to {}", msg, &player_info.account.id);
}
Err(error) => {
@@ -616,6 +612,7 @@ pub mod nogamepads_server {
// 退出程序的监听
if self.stop.load(SeqCst) {
tokio::time::sleep(Duration::from_secs(1)).await;
+
info!("Main thread exited.");
exit(0);
}
diff --git a/core/src/pad_io/server_debug_cli.rs b/core/src/pad_io/server_debug_cli.rs
index 76e331f..39e1868 100644
--- a/core/src/pad_io/server_debug_cli.rs
+++ b/core/src/pad_io/server_debug_cli.rs
@@ -4,6 +4,7 @@ use crate::pad_io::server::nogamepads_server::PadServer;
use clap::{Args, Parser, Subcommand};
use std::ops::{Index};
use std::sync::{Arc, MutexGuard, PoisonError};
+use log::{error, info};
use crate::pad_data::pad_player_info::nogamepads_player_info::PlayerInfo;
/// NoGamePads Server - Cli
@@ -98,7 +99,7 @@ pub fn process_debug_cmd (cmd: Psc, server: Arc<PadServer>) {
}
Commands::Stop => {
- server.stop_listening();
+ server.stop_server();
}
Commands::List => {
@@ -114,21 +115,21 @@ pub fn process_debug_cmd (cmd: Psc, server: Arc<PadServer>) {
let player = players.index(args.player.clamp(0, players.iter().count() -1));
if args.list {
for msg in server.list_received(player) {
- println!("{:?}", msg);
+ info!("{:?}", msg);
}
} else {
- println!("Total {} messsage(s)!", server.list_received(player).iter().count());
+ info!("Total {} messsage(s)!", server.list_received(player).iter().count());
}
}
Commands::Pop(args) => {
match get_player_by_index(&server, args.index) {
None => {
- eprintln!("Pup message failed : Player index \"{}\" not found!", args.index);
+ error!("Pup message failed : Player index \"{}\" not found!", args.index);
}
Some(player) => {
let message = server.pop_msg_or(&player, ControlMessage::Err);
- println!("{:?}", message);
+ info!("{:?}", message);
}
}
}
@@ -166,7 +167,7 @@ pub fn process_debug_cmd (cmd: Psc, server: Arc<PadServer>) {
fn put_to_list(server: Arc<PadServer>, player_index: usize, message: GameMessage) {
match get_player_by_index(&server, player_index) {
None => {
- eprintln!("Put message failed : Player index \"{}\" not found!", player_index);
+ error!("Put message failed : Player index \"{}\" not found!", player_index);
}
Some(player) => {
server.put_msg_to(message, &player);
@@ -197,8 +198,7 @@ fn print_player_list(list: Result<Vec<PlayerInfo>, PoisonError<MutexGuard<HashMa
let mut i = 0;
for player in list {
let n = player.customize.nickname;
- print!("({}){} ", i, n);
+ info!("({}){} ", i, n);
i += 1;
- println!();
}
} \ No newline at end of file