aboutsummaryrefslogtreecommitdiffstats
path: root/mumd
diff options
context:
space:
mode:
authorEskil Queseth <eskilq@kth.se>2021-05-18 02:36:47 +0200
committerEskil Queseth <eskilq@kth.se>2021-05-18 02:36:47 +0200
commit19267cb7ac28ce51674baa9516ebb36074709d4f (patch)
tree1e6dccb1e5c349ceaab3e267fa339202d7fd16f3 /mumd
parent4473bdd1536699c53f27085dd7d4d5d14dd93508 (diff)
downloadmum-19267cb7ac28ce51674baa9516ebb36074709d4f.tar.gz
add ability for backend to keep track of messages
Diffstat (limited to 'mumd')
-rw-r--r--mumd/src/network/tcp.rs9
-rw-r--r--mumd/src/state.rs22
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()
}