Browse Source

Small fixes to Dispatcher.

wip
Titouan Rigoudy 4 years ago
parent
commit
3328aaed3d
1 changed files with 25 additions and 22 deletions
  1. +25
    -22
      client/src/dispatcher.rs

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

@ -14,6 +14,12 @@ pub enum Message {
ServerResponse(ServerResponse),
}
impl From<ServerResponse> for Message {
fn from(response: ServerResponse) -> Self {
Self::ServerResponse(response)
}
}
/// Pairs together a message and its handler as chosen by the dispatcher.
/// Implements Job so as to be scheduled on an executor.
struct DispatchedMessage<M, H> {
@ -21,12 +27,6 @@ struct DispatchedMessage<M, H> {
handler: H,
}
impl<M, H> DispatchedMessage<M, H> {
fn new(message: M, handler: H) -> Self {
Self { message, handler }
}
}
impl<M, H> Job for DispatchedMessage<M, H>
where
M: Debug + Send,
@ -57,14 +57,17 @@ impl Dispatcher {
pub fn dispatch(&self, message: Message) -> Box<dyn Job> {
match message {
Message::ServerResponse(ServerResponse::LoginResponse(response)) => {
Box::new(DispatchedMessage::new(response, LoginHandler::default()))
Box::new(DispatchedMessage {
message: response,
handler: LoginHandler::default(),
})
}
Message::ServerResponse(ServerResponse::PrivilegedUsersResponse(
response,
)) => Box::new(DispatchedMessage::new(
response,
SetPrivilegedUsersHandler::default(),
)),
)) => Box::new(DispatchedMessage {
message: response,
handler: SetPrivilegedUsersHandler::default(),
}),
_ => panic!("Unimplemented"),
}
}
@ -72,27 +75,27 @@ impl Dispatcher {
#[cfg(test)]
mod tests {
use solstice_proto::server;
use solstice_proto::server::{self, ServerResponse};
use super::*;
fn into_message<T: Into<ServerResponse>>(t: T) -> Message {
t.into().into()
}
#[test]
fn dispatcher_privileged_users_response() {
Dispatcher::new().dispatch(Message::ServerResponse(
server::ServerResponse::PrivilegedUsersResponse(
server::PrivilegedUsersResponse {
users: vec!["foo".to_string(), "bar".to_string(), "baz".to_string()],
},
),
));
Dispatcher::new().dispatch(into_message(server::PrivilegedUsersResponse {
users: vec!["foo".to_string(), "bar".to_string(), "baz".to_string()],
}));
}
#[test]
fn dispatcher_login_response() {
Dispatcher::new().dispatch(Message::ServerResponse(
server::ServerResponse::LoginResponse(server::LoginResponse::LoginFail {
Dispatcher::new().dispatch(into_message(
server::LoginResponse::LoginFail {
reason: "bleep bloop".to_string(),
}),
},
));
}
}

Loading…
Cancel
Save