use std::collections::HashMap; use std::sync::Arc; use std::fmt; use tokio::net::TcpStream; use tokio::io::{WriteHalf}; use crate::handlers::chat_client::ChatClientHandler; #[derive(Clone)] pub struct ConnectionState { pub user_id: Option, pub session_id: Option, pub character_id: Option, pub character_name: Option, pub character_list: Option>, pub additional_data: HashMap, pub client_id: u16, pub local_id: u16, // Local connection ID for packet routing pub chat_handler: Option>, pub writer: Option>>>, } impl ConnectionState { pub fn new() -> Self { Self { user_id: None, session_id: None, character_id: None, character_name: None, character_list: None, additional_data: HashMap::new(), client_id: 0, local_id: 0, chat_handler: None, writer: None, } } } impl fmt::Debug for ConnectionState { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { f.debug_struct("ConnectionState") .field("user_id", &self.user_id) .field("session_id", &self.session_id) .field("character_id", &self.character_id) .field("character_name", &self.character_name) .field("character_list", &self.character_list) .field("additional_data", &self.additional_data) .field("client_id", &self.client_id) .field("chat_handler", &self.chat_handler.as_ref().map(|_| "")) .field("writer", &self.writer.as_ref().map(|_| "")) .finish() } }