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:
@@ -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));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user