diff options
| author | Eskil Queseth <eskilq@kth.se> | 2021-05-18 02:36:47 +0200 |
|---|---|---|
| committer | Eskil Queseth <eskilq@kth.se> | 2021-05-18 02:36:47 +0200 |
| commit | 19267cb7ac28ce51674baa9516ebb36074709d4f (patch) | |
| tree | 1e6dccb1e5c349ceaab3e267fa339202d7fd16f3 /mumd/src | |
| parent | 4473bdd1536699c53f27085dd7d4d5d14dd93508 (diff) | |
| download | mum-19267cb7ac28ce51674baa9516ebb36074709d4f.tar.gz | |
add ability for backend to keep track of messages
Diffstat (limited to 'mumd/src')
| -rw-r--r-- | mumd/src/network/tcp.rs | 9 | ||||
| -rw-r--r-- | mumd/src/state.rs | 22 |
2 files changed, 19 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() } |
