use serde::{Deserialize, Serialize}; use serde_json::Value; use std::collections::{HashMap, HashSet}; use std::sync::Arc; use tokio::sync::mpsc; use tokio_postgres::Client as PgClient; pub(crate) type ClientId = u64; #[derive(Clone)] pub(crate) struct ClientConn { pub(crate) user_name: String, pub(crate) room: String, pub(crate) color: Option, pub(crate) token: Option, pub(crate) falukant_user_id: Option, pub(crate) chat_user_id: Option, pub(crate) gender_id: Option, pub(crate) age: Option, pub(crate) rights: HashSet, pub(crate) right_type_ids: HashSet, pub(crate) logged_in: bool, pub(crate) tx: mpsc::UnboundedSender, } #[derive(Default)] pub(crate) struct ChatState { pub(crate) clients: HashMap, pub(crate) rooms: HashMap>, pub(crate) tokens: HashMap, pub(crate) logged_in_names: HashSet, pub(crate) dice_games: HashMap, pub(crate) room_meta: HashMap, } #[derive(Clone, Default)] pub(crate) struct ServerConfig { pub(crate) allowed_users: Option>, pub(crate) db_client: Option>, } #[derive(Debug)] pub(crate) struct UserProfile { pub(crate) display_name: String, pub(crate) color: Option, pub(crate) falukant_user_id: Option, pub(crate) chat_user_id: Option, pub(crate) gender_id: Option, pub(crate) age: Option, pub(crate) rights: HashSet, pub(crate) right_type_ids: HashSet, } #[derive(Debug, Deserialize)] pub(crate) struct Command { #[serde(rename = "type")] pub(crate) cmd_type: Value, pub(crate) token: Option, pub(crate) name: Option, pub(crate) room: Option, pub(crate) message: Option, pub(crate) value: Option, pub(crate) password: Option, pub(crate) rounds: Option, pub(crate) to: Option, #[serde(rename = "userName")] pub(crate) user_name: Option, } #[derive(Debug, Serialize)] pub(crate) struct RoomInfo { pub(crate) name: String, pub(crate) users: usize, } #[derive(Clone, Default)] pub(crate) struct DiceGame { pub(crate) running: bool, pub(crate) current_round: i32, pub(crate) total_rounds: i32, pub(crate) rolled_this_round: HashMap, pub(crate) total_scores: HashMap, } #[allow(dead_code)] #[derive(Clone, Debug, Default)] pub(crate) struct RoomMeta { pub(crate) name: String, pub(crate) password: Option, pub(crate) gender_restriction_id: Option, pub(crate) required_user_right_id: Option, pub(crate) min_age: Option, pub(crate) max_age: Option, pub(crate) is_public: bool, pub(crate) owner_id: Option, pub(crate) room_type_id: Option, pub(crate) friends_of_owner_only: bool, pub(crate) is_temporary: bool, pub(crate) created_at_unix: Option, pub(crate) empty_since_unix: Option, }