Browse Source

Introduce SetPrivilegedUsersHandler.

This is the first message handler to be defined.
wip
Titouan Rigoudy 6 years ago
parent
commit
d5b269a05d
7 changed files with 88 additions and 4 deletions
  1. +1
    -1
      src/context.rs
  2. +26
    -2
      src/dispatcher.rs
  3. +1
    -1
      src/executor.rs
  4. +3
    -0
      src/handlers/mod.rs
  5. +51
    -0
      src/handlers/set_privileged_users_handler.rs
  6. +1
    -0
      src/main.rs
  7. +5
    -0
      src/user.rs

+ 1
- 1
src/context.rs View File

@ -38,6 +38,6 @@ mod tests {
#[test]
fn context_is_sync() {
let sync: &dyn Sync = &Context::new();
let _sync: &dyn Sync = &Context::new();
}
}

+ 26
- 2
src/dispatcher.rs View File

@ -4,6 +4,7 @@ use std::fmt::Debug;
use crate::context::Context;
use crate::executor::Job;
use crate::handlers::SetPrivilegedUsersHandler;
use crate::message_handler::MessageHandler;
use crate::proto::server::ServerResponse;
@ -53,7 +54,30 @@ impl Dispatcher {
}
/// Dispatches the given message by wrapping it with a handler.
pub fn dispatch(message: Message) -> Box<dyn Job> {
panic!("Unimplemented")
pub fn dispatch(&self, message: Message) -> Box<dyn Job> {
let dispatched = match message {
Message::ServerResponse(ServerResponse::PrivilegedUsersResponse(response)) => {
DispatchedMessage::new(response, SetPrivilegedUsersHandler::default())
}
_ => panic!("Unimplemented"),
};
Box::new(dispatched)
}
}
#[cfg(test)]
mod tests {
use crate::proto::server;
use super::*;
#[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()],
}),
));
}
}

+ 1
- 1
src/executor.rs View File

@ -77,7 +77,7 @@ mod tests {
}
impl Job for Waiter {
fn execute(self: Box<Self>, context: &Context) {
fn execute(self: Box<Self>, _context: &Context) {
self.barrier.wait();
}
}


+ 3
- 0
src/handlers/mod.rs View File

@ -0,0 +1,3 @@
mod set_privileged_users_handler;
pub use set_privileged_users_handler::SetPrivilegedUsersHandler;

+ 51
- 0
src/handlers/set_privileged_users_handler.rs View File

@ -0,0 +1,51 @@
use std::io;
use crate::context::Context;
use crate::message_handler::MessageHandler;
use crate::proto::server::PrivilegedUsersResponse;
#[derive(Debug, Default)]
pub struct SetPrivilegedUsersHandler;
impl MessageHandler<PrivilegedUsersResponse> for SetPrivilegedUsersHandler {
fn run(self, context: &Context, message: &PrivilegedUsersResponse) -> io::Result<()> {
let users = message.users.clone();
context.users.lock().set_all_privileged(users);
Ok(())
}
fn name() -> String {
"SetPrivilegedUsersHandler".to_string()
}
}
#[cfg(test)]
mod tests {
use crate::context::Context;
use crate::message_handler::MessageHandler;
use crate::proto::server::PrivilegedUsersResponse;
use super::SetPrivilegedUsersHandler;
#[test]
fn run_sets_privileged_users() {
let context = Context::new();
let response = PrivilegedUsersResponse {
users: vec![
"aomame".to_string(),
"billybob".to_string(),
"carlos".to_string(),
],
};
SetPrivilegedUsersHandler::default()
.run(&context, &response)
.unwrap();
let mut privileged = context.users.lock().get_all_privileged();
privileged.sort();
assert_eq!(privileged, response.users);
}
}

+ 1
- 0
src/main.rs View File

@ -13,6 +13,7 @@ mod context;
mod control;
mod dispatcher;
mod executor;
mod handlers;
mod message_handler;
mod proto;
mod room;


+ 5
- 0
src/user.rs View File

@ -93,6 +93,11 @@ impl UserMap {
}
}
/// Returns a copy of the set of privileged users.
pub fn get_all_privileged(&self) -> Vec<String> {
self.privileged.iter().map(|s| s.to_string()).collect()
}
/// Marks the given user as privileged.
pub fn insert_privileged(&mut self, user_name: String) {
self.privileged.insert(user_name);


Loading…
Cancel
Save