|
|
|
@ -18,11 +18,20 @@ use crate::proto::server::{ |
|
|
|
|
|
|
|
#[derive(Debug, Default)]
|
|
|
|
pub struct UserStatusMap {
|
|
|
|
pub map: HashMap<String, UserStatusResponse>,
|
|
|
|
map: HashMap<String, UserStatusResponse>,
|
|
|
|
}
|
|
|
|
|
|
|
|
// TODO: fn insert(&self, UserStatusResponse), since response contains username.
|
|
|
|
// TODO: fn get(&self) -> Option<UserStatusResponse> (returns cloned)
|
|
|
|
// IDEA: impl FromIterator<UserStatusResponse> for UserStatusMap.
|
|
|
|
|
|
|
|
impl UserStatusMap {
|
|
|
|
pub fn insert(&mut self, response: UserStatusResponse) {
|
|
|
|
self.map.insert(response.user_name.clone(), response);
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn get(&self, user_name: &str) -> Option<UserStatusResponse> {
|
|
|
|
self.map.get(user_name).map(|response| response.clone())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// TODO: Derive Debug?
|
|
|
|
struct Handler {
|
|
|
|
@ -71,13 +80,7 @@ impl Handler { |
|
|
|
info!("Handler: received request: {:?}", request);
|
|
|
|
match request {
|
|
|
|
ServerRequest::UserStatusRequest(UserStatusRequest { user_name }) => {
|
|
|
|
// TODO: Better interface to UserStatusMap.
|
|
|
|
let entry = self
|
|
|
|
.user_status_map
|
|
|
|
.lock()
|
|
|
|
.map
|
|
|
|
.get(&user_name)
|
|
|
|
.map(|response| response.clone());
|
|
|
|
let entry = self.user_status_map.lock().get(&user_name);
|
|
|
|
if let Some(response) = entry {
|
|
|
|
let response = ServerResponse::UserStatusResponse(response);
|
|
|
|
self.frame_stream.write(&response).await?;
|
|
|
|
|