aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mumd/src/network/tcp.rs9
-rw-r--r--mumd/src/state.rs22
-rw-r--r--mumlib/src/command.rs4
3 files changed, 23 insertions, 12 deletions
diff --git a/mumd/src/network/tcp.rs b/mumd/src/network/tcp.rs
index 7606987..2a97b4a 100644
--- a/mumd/src/network/tcp.rs
+++ b/mumd/src/network/tcp.rs
@@ -269,12 +269,9 @@ async fn listen(
}
};
match packet {
- ControlPacket::TextMessage(msg) => {
- info!(
- "Got message from user with session ID {}: {}",
- msg.get_actor(),
- msg.get_message()
- );
+ ControlPacket::TextMessage(mut msg) => {
+ let mut state = state.write().unwrap();
+ state.register_message((msg.take_message(), msg.get_actor()));
}
ControlPacket::CryptSetup(msg) => {
debug!("Crypt setup");
diff --git a/mumd/src/state.rs b/mumd/src/state.rs
index 45e7301..0f608d7 100644
--- a/mumd/src/state.rs
+++ b/mumd/src/state.rs
@@ -59,6 +59,7 @@ pub struct State {
server: Option<Server>,
audio_input: AudioInput,
audio_output: AudioOutput,
+ message_buffer: Vec<(String, u32)>,
phase_watcher: (watch::Sender<StatePhase>, watch::Receiver<StatePhase>),
}
@@ -79,6 +80,7 @@ impl State {
server: None,
audio_input,
audio_output,
+ message_buffer: Vec::new(),
phase_watcher,
};
state.reload_config();
@@ -426,6 +428,16 @@ impl State {
self.audio_output.set_user_volume(user_id, volume);
now!(Ok(None))
}
+ Command::PastMessages => {
+ let server = match self.server.as_ref() {
+ Some(s) => s,
+ None => return now!(Err(Error::Disconnected)),
+ };
+ let messages = std::mem::take(&mut self.message_buffer).into_iter()
+ .map(|(msg, user)| (msg, server.users().get(&user).unwrap().name().to_string())).collect();
+
+ now!(Ok(Some(CommandResponse::PastMessages { messages })))
+ }
}
}
@@ -590,6 +602,10 @@ impl State {
self.audio_output.load_sound_effects(sound_effects);
}
}
+
+ pub fn register_message(&mut self, msg: (String, u32)) {
+ self.message_buffer.push(msg);
+ }
pub fn broadcast_phase(&self, phase: StatePhase) {
self.phase_watcher
@@ -609,12 +625,6 @@ impl State {
pub fn audio_output(&self) -> &AudioOutput {
&self.audio_output
}
- pub fn audio_input_mut(&mut self) -> &mut AudioInput {
- &mut self.audio_input
- }
- pub fn audio_output_mut(&mut self) -> &mut AudioOutput {
- &mut self.audio_output
- }
pub fn phase_receiver(&self) -> watch::Receiver<StatePhase> {
self.phase_watcher.1.clone()
}
diff --git a/mumlib/src/command.rs b/mumlib/src/command.rs
index d2e8477..de54261 100644
--- a/mumlib/src/command.rs
+++ b/mumlib/src/command.rs
@@ -29,6 +29,7 @@ pub enum Command {
},
Status,
UserVolumeSet(String, f32),
+ PastMessages,
}
#[derive(Debug, Deserialize, Serialize)]
@@ -55,4 +56,7 @@ pub enum CommandResponse {
Status {
server_state: Server,
},
+ PastMessages {
+ messages: Vec<(String, String)>,
+ }
}