From 5ccae4b0422a461eea4b0699872a1e5f32816df3 Mon Sep 17 00:00:00 2001 From: Titouan Rigoudy Date: Sat, 6 Jul 2019 00:05:52 +0000 Subject: [PATCH] Add stub LoginHandler. --- src/dispatcher.rs | 24 +++++++++++++----- src/handlers/login_handler.rs | 48 +++++++++++++++++++++++++++++++++++ src/handlers/mod.rs | 2 ++ 3 files changed, 67 insertions(+), 7 deletions(-) create mode 100644 src/handlers/login_handler.rs diff --git a/src/dispatcher.rs b/src/dispatcher.rs index 03a2d47..9292a29 100644 --- a/src/dispatcher.rs +++ b/src/dispatcher.rs @@ -4,7 +4,7 @@ use std::fmt::Debug; use crate::context::Context; use crate::executor::Job; -use crate::handlers::SetPrivilegedUsersHandler; +use crate::handlers::{LoginHandler, SetPrivilegedUsersHandler}; use crate::message_handler::MessageHandler; use crate::proto::server::ServerResponse; @@ -55,14 +55,15 @@ impl Dispatcher { /// Dispatches the given message by wrapping it with a handler. pub fn dispatch(&self, message: Message) -> Box { - let dispatched = match message { - Message::ServerResponse(ServerResponse::PrivilegedUsersResponse(response)) => { - DispatchedMessage::new(response, SetPrivilegedUsersHandler::default()) + match message { + Message::ServerResponse(ServerResponse::LoginResponse(response)) => { + Box::new(DispatchedMessage::new(response, LoginHandler::default())) } + Message::ServerResponse(ServerResponse::PrivilegedUsersResponse(response)) => Box::new( + DispatchedMessage::new(response, SetPrivilegedUsersHandler::default()), + ), _ => panic!("Unimplemented"), - }; - - Box::new(dispatched) + } } } @@ -80,4 +81,13 @@ mod tests { }), )); } + + #[test] + fn dispatcher_login_response() { + Dispatcher::new().dispatch(Message::ServerResponse( + server::ServerResponse::LoginResponse(server::LoginResponse::LoginFail { + reason: "bleep bloop".to_string(), + }), + )); + } } diff --git a/src/handlers/login_handler.rs b/src/handlers/login_handler.rs new file mode 100644 index 0000000..2051f82 --- /dev/null +++ b/src/handlers/login_handler.rs @@ -0,0 +1,48 @@ +use std::io; + +use crate::context::Context; +use crate::login::LoginStatus; +use crate::message_handler::MessageHandler; +use crate::proto::server::LoginResponse; + +#[derive(Debug, Default)] +pub struct LoginHandler; + +impl MessageHandler for LoginHandler { + fn run(self, context: &Context, message: &LoginResponse) -> io::Result<()> { + let lock = context.login.lock(); + + match *lock { + LoginStatus::AwaitingResponse => (), + _ => { + return Err(io::Error::new( + io::ErrorKind::Other, + format!("unexpected login response, status = {:?}", *lock), + )); + } + }; + + unimplemented!(); + } + + fn name() -> String { + "LoginHandler".to_string() + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + #[should_panic] + fn run_fails_on_wrong_status() { + let context = Context::new(); + + let response = LoginResponse::LoginFail { + reason: "bleep bloop".to_string(), + }; + + LoginHandler::default().run(&context, &response).unwrap(); + } +} diff --git a/src/handlers/mod.rs b/src/handlers/mod.rs index 92bfcd0..b903112 100644 --- a/src/handlers/mod.rs +++ b/src/handlers/mod.rs @@ -1,3 +1,5 @@ +mod login_handler; mod set_privileged_users_handler; +pub use login_handler::LoginHandler; pub use set_privileged_users_handler::SetPrivilegedUsersHandler;