From 2d5b2b2adb5bdb44d88dfda0b1b0190a33b2e654 Mon Sep 17 00:00:00 2001 From: Titouan Rigoudy Date: Sat, 31 Jul 2021 22:39:22 -0400 Subject: [PATCH] Basic handler for control RoomListRequest. --- client/src/dispatcher.rs | 16 ++++++- client/src/handlers/mod.rs | 2 + .../src/handlers/room_list_request_handler.rs | 46 +++++++++++++++++++ 3 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 client/src/handlers/room_list_request_handler.rs diff --git a/client/src/dispatcher.rs b/client/src/dispatcher.rs index 640fbad..cd07a5a 100644 --- a/client/src/dispatcher.rs +++ b/client/src/dispatcher.rs @@ -6,13 +6,17 @@ use log::warn; use solstice_proto::server::ServerResponse; use crate::context::Context; +use crate::control::Request as ControlRequest; use crate::executor::Job; -use crate::handlers::{SetPrivilegedUsersHandler, SetRoomListHandler}; +use crate::handlers::{ + RoomListRequestHandler, SetPrivilegedUsersHandler, SetRoomListHandler, +}; use crate::message_handler::MessageHandler; /// The type of messages dispatched by a dispatcher. #[derive(Debug)] pub enum Message { + ControlRequest(ControlRequest), ServerResponse(ServerResponse), } @@ -74,6 +78,16 @@ impl Dispatcher { warn!("Unhandled server response: {:?}", response); None } + Message::ControlRequest(ControlRequest::RoomListRequest) => { + Some(Box::new(DispatchedMessage { + message: (), + handler: RoomListRequestHandler::default(), + })) + } + Message::ControlRequest(request) => { + warn!("Unhandled control request: {:?}", request); + None + } } } } diff --git a/client/src/handlers/mod.rs b/client/src/handlers/mod.rs index df340d3..4ceb0f3 100644 --- a/client/src/handlers/mod.rs +++ b/client/src/handlers/mod.rs @@ -1,5 +1,7 @@ +mod room_list_request_handler; mod set_privileged_users_handler; mod set_room_list_handler; +pub use room_list_request_handler::RoomListRequestHandler; pub use set_privileged_users_handler::SetPrivilegedUsersHandler; pub use set_room_list_handler::SetRoomListHandler; diff --git a/client/src/handlers/room_list_request_handler.rs b/client/src/handlers/room_list_request_handler.rs new file mode 100644 index 0000000..28b5b42 --- /dev/null +++ b/client/src/handlers/room_list_request_handler.rs @@ -0,0 +1,46 @@ +use std::io; + +use solstice_proto::ServerRequest; + +use crate::context::Context; +use crate::message_handler::MessageHandler; + +#[derive(Debug, Default)] +pub struct RoomListRequestHandler; + +impl MessageHandler<()> for RoomListRequestHandler { + fn run(self, context: &Context, message: &()) -> io::Result<()> { + // TODO: Send `RoomListResponse` back over socket. + context + .server_request_tx + .blocking_send(ServerRequest::RoomListRequest); + Ok(()) + } + + fn name() -> String { + "RoomListRequestHandler".to_string() + } +} + +#[cfg(test)] +mod tests { + use solstice_proto::ServerRequest; + + use crate::context::ContextBundle; + use crate::message_handler::MessageHandler; + + use super::RoomListRequestHandler; + + #[test] + fn run_forwards_request() { + let mut bundle = ContextBundle::default(); + + RoomListRequestHandler::default() + .run(&bundle.context, &()) + .unwrap(); + + let request = bundle.server_request_rx.blocking_recv().unwrap(); + + assert_eq!(request, ServerRequest::RoomListRequest); + } +}