diff --git a/client/src/context.rs b/client/src/context.rs index dde100e..d4f193b 100644 --- a/client/src/context.rs +++ b/client/src/context.rs @@ -9,7 +9,9 @@ use crate::clock::SimulatedSystemClock; use crate::clock::SystemClock; use crate::control::Response as ControlResponse; use crate::peer::PeerMap; -use crate::server::context::{ServerContext, ServerLoginInfo}; +use crate::server::context::{ + ServerContext, ServerLoggedInContext, ServerLoggedInContextOptions, +}; use crate::server::room::RoomMap; use crate::server::user::UserMap; use crate::Config; @@ -122,13 +124,15 @@ impl ContextBundle { peers: options.initial_state.peers, }, // TODO: Do not login immediately, wait for a login event. - server: ServerContext::new_logged_in( - options.user_name.clone(), - ServerLoginInfo { + server: ServerContext::LoggedIn(ServerLoggedInContext::new( + server_request_tx.clone(), + ServerLoggedInContextOptions { + user_name: options.user_name.clone(), motd: "unimplemented".to_string(), - request_tx: server_request_tx.clone(), + rooms: options.initial_state.rooms, + users: options.initial_state.users, }, - ), + )), user_name: options.user_name, server_request_tx, control_response_tx, diff --git a/client/src/server/context.rs b/client/src/server/context.rs index fa4b589..b4e9723 100644 --- a/client/src/server/context.rs +++ b/client/src/server/context.rs @@ -25,7 +25,30 @@ pub struct ServerLoggedInContext { motd: String, } +/// Initial values from which a `ServerLoggedInContext` can be built. +pub struct ServerLoggedInContextOptions { + /// See similarly-named fields in `ServerLoggedInContext`. + pub user_name: String, + pub motd: String, + pub rooms: RoomMap, + pub users: UserMap, +} + impl ServerLoggedInContext { + /// Mainly for use in tests. + // TODO: Mark as #[cfg(test)]? + pub fn new( + request_tx: Sender, + options: ServerLoggedInContextOptions, + ) -> Self { + Self { + rooms: options.rooms, + users: options.users, + user_name: options.user_name, + motd: options.motd, + request_tx, + } + } /// The user name with which we logged in. pub fn user_name(&self) -> &str { &self.user_name @@ -131,17 +154,6 @@ impl ServerContext { }) } - /// Constructs a new logged in context with the given information. - pub fn new_logged_in(user_name: String, login: ServerLoginInfo, rooms: RoomMap, users: UserMap) -> Self { - ServerLoggedOutContext { - user_name, - error: None, - } - .login(login), - Self::LoggedIn( - ) - } - /// Attempts to record a successful login. Fails if we are already logged in. pub fn login( &mut self,