feat(lib): surface server announcements as messages from "server"
An AdminMessage (server code 66) is how a server tells everyone it is going down, and the client dropped it on the floor. It now arrives in the private-message inbox as a message from the user "server", which is also the name the server's own command replies already come from, so every reader of that inbox shows it without a new API.
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
use crate::actor::{Actor, ActorHandle, ConnectionState};
|
||||
use crate::client::ClientOperation;
|
||||
use crate::dispatcher::MessageDispatcher;
|
||||
use crate::message::server::AdminMessageHandler;
|
||||
use crate::message::server::CheckPrivilegesHandler;
|
||||
use crate::message::server::ConnectToPeerHandler;
|
||||
use crate::message::server::ExcludedSearchPhrasesHandler;
|
||||
@@ -383,6 +384,7 @@ impl ServerActor {
|
||||
|
||||
handlers.register_handler(LoginHandler);
|
||||
handlers.register_handler(ReloggedHandler);
|
||||
handlers.register_handler(AdminMessageHandler);
|
||||
handlers.register_handler(RoomListHandler);
|
||||
handlers.register_handler(GetUserStatusHandler);
|
||||
handlers.register_handler(WatchUserHandler);
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
//! `AdminMessage` (server code 66): an announcement from the server to
|
||||
//! everyone, surfaced as a private message from the user "server".
|
||||
|
||||
use crate::actor::server_actor::{ServerMessage, UserMessage};
|
||||
use crate::message::{Message, MessageHandler};
|
||||
use std::sync::mpsc::Sender;
|
||||
use std::time::{SystemTime, UNIX_EPOCH};
|
||||
|
||||
pub struct AdminMessageHandler;
|
||||
|
||||
impl MessageHandler<ServerMessage> for AdminMessageHandler {
|
||||
fn get_code(&self) -> u32 {
|
||||
66
|
||||
}
|
||||
|
||||
fn handle(&self, message: &mut Message, sender: Sender<ServerMessage>) {
|
||||
let now = SystemTime::now()
|
||||
.duration_since(UNIX_EPOCH)
|
||||
.map_or(0, |since| since.as_secs() as u32);
|
||||
let announcement = UserMessage::new(
|
||||
0,
|
||||
now,
|
||||
"server".to_string(),
|
||||
message.read_string(),
|
||||
false,
|
||||
);
|
||||
let _ =
|
||||
sender.send(ServerMessage::PrivateMessageReceived(announcement));
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
mod admin_message;
|
||||
mod connect_to_peer;
|
||||
mod excluded_search_phrases;
|
||||
mod file_search;
|
||||
@@ -19,6 +20,7 @@ mod user_left_room;
|
||||
mod watch_user;
|
||||
mod wish_list_interval;
|
||||
|
||||
pub use admin_message::AdminMessageHandler;
|
||||
pub use connect_to_peer::ConnectToPeerHandler;
|
||||
pub use excluded_search_phrases::ExcludedSearchPhrasesHandler;
|
||||
pub use file_search::FileSearchHandler;
|
||||
|
||||
Reference in New Issue
Block a user