Browse Source

Basic handling for RoomMessageResponse: forward it.

wip
Titouan Rigoudy 4 years ago
parent
commit
3beb31087b
3 changed files with 101 additions and 1 deletions
  1. +22
    -1
      client/src/dispatcher.rs
  2. +2
    -0
      client/src/handlers/mod.rs
  3. +77
    -0
      client/src/handlers/room_message_response_handler.rs

+ 22
- 1
client/src/dispatcher.rs View File

@ -10,7 +10,8 @@ use crate::control::Request as ControlRequest;
use crate::executor::Job;
use crate::handlers::{
RoomJoinRequestHandler, RoomJoinResponseHandler, RoomListRequestHandler,
RoomMessageRequestHandler, SetPrivilegedUsersHandler, SetRoomListHandler,
RoomMessageRequestHandler, RoomMessageResponseHandler,
SetPrivilegedUsersHandler, SetRoomListHandler,
};
use crate::message_handler::MessageHandler;
@ -81,6 +82,12 @@ impl Dispatcher {
handler: RoomJoinResponseHandler::default(),
}))
}
Message::ServerResponse(ServerResponse::RoomMessageResponse(
response,
)) => Some(Box::new(DispatchedMessage {
message: response,
handler: RoomMessageResponseHandler::default(),
})),
Message::ServerResponse(ServerResponse::RoomListResponse(response)) => {
Some(Box::new(DispatchedMessage {
message: response,
@ -165,6 +172,20 @@ mod tests {
.is_some());
}
#[test]
fn dispatches_room_message_response() {
assert!(Dispatcher::new()
.dispatch(Message::ServerResponse(
server::RoomMessageResponse {
room_name: "bleep".to_string(),
user_name: "shruti".to_string(),
message: "yo!".to_string(),
}
.into()
))
.is_some());
}
#[test]
fn dispatches_room_list_response() {
assert!(Dispatcher::new()


+ 2
- 0
client/src/handlers/mod.rs View File

@ -2,6 +2,7 @@ mod room_join_request_handler;
mod room_join_response_handler;
mod room_list_request_handler;
mod room_message_request_handler;
mod room_message_response_handler;
mod set_privileged_users_handler;
mod set_room_list_handler;
@ -9,5 +10,6 @@ pub use room_join_request_handler::RoomJoinRequestHandler;
pub use room_join_response_handler::RoomJoinResponseHandler;
pub use room_list_request_handler::RoomListRequestHandler;
pub use room_message_request_handler::RoomMessageRequestHandler;
pub use room_message_response_handler::RoomMessageResponseHandler;
pub use set_privileged_users_handler::SetPrivilegedUsersHandler;
pub use set_room_list_handler::SetRoomListHandler;

+ 77
- 0
client/src/handlers/room_message_response_handler.rs View File

@ -0,0 +1,77 @@
use anyhow::Context as AnyhowContext;
use solstice_proto::server;
use crate::context::Context;
use crate::control;
use crate::message_handler::MessageHandler;
#[derive(Debug, Default)]
pub struct RoomMessageResponseHandler;
impl MessageHandler for RoomMessageResponseHandler {
type Message = server::RoomMessageResponse;
fn run(
self,
context: &Context,
message: &server::RoomMessageResponse,
) -> anyhow::Result<()> {
// TODO: Append message to room struct.
context
.control_response_tx
.blocking_send(control::Response::RoomMessageResponse(
control::RoomMessageResponse {
room_name: message.room_name.clone(),
user_name: message.user_name.clone(),
message: message.message.clone(),
},
))
.context("sending control response")?;
Ok(())
}
fn name() -> String {
"RoomMessageResponseHandler".to_string()
}
}
#[cfg(test)]
mod tests {
use solstice_proto::server;
use crate::context::ContextBundle;
use crate::control;
use crate::message_handler::MessageHandler;
use super::RoomMessageResponseHandler;
#[test]
fn run_forwards_response() {
let mut bundle = ContextBundle::default();
RoomMessageResponseHandler::default()
.run(
&bundle.context,
&server::RoomMessageResponse {
room_name: "bleep".to_string(),
user_name: "shruti".to_string(),
message: "yo!".to_string(),
},
)
.expect("running handler");
let response = bundle
.control_response_rx
.blocking_recv()
.expect("receiving control response");
assert_eq!(
response,
control::Response::RoomMessageResponse(control::RoomMessageResponse {
room_name: "bleep".to_string(),
user_name: "shruti".to_string(),
message: "yo!".to_string(),
})
);
}
}

Loading…
Cancel
Save