|
|
@@ -140,8 +140,8 @@ async fn get_messages(
|
|
|
) -> Result<(), Box<dyn Error>> {
|
|
|
// Wait for the next message to be received before populating our local copy of the db,
|
|
|
// that way other clients have time to register.
|
|
|
- let mut discard = vec![0u8];
|
|
|
- while socket.peek(&mut discard).await? == 0 {}
|
|
|
+ log!("waiting for message from {} to {}", sender, group);
|
|
|
+ let buf = mgen::get_message_bytes(&mut socket).await?;
|
|
|
|
|
|
let db = global_db.read().await.clone();
|
|
|
let message_channels: Vec<_> = db
|
|
|
@@ -149,6 +149,28 @@ async fn get_messages(
|
|
|
.filter_map(|(k, v)| if *k != sender { Some(v) } else { None })
|
|
|
.collect();
|
|
|
|
|
|
+ let message = MessageHeaderRef::deserialize(&buf[4..])?;
|
|
|
+ assert!(message.sender == sender);
|
|
|
+
|
|
|
+ match message.body {
|
|
|
+ MessageBody::Size(_) => {
|
|
|
+ assert!(message.group == group);
|
|
|
+ log!("got message from {} for {}", sender, group);
|
|
|
+ let body = message.body;
|
|
|
+ let m = Arc::new(SerializedMessage { header: buf, body });
|
|
|
+ for recipient in message_channels.iter() {
|
|
|
+ recipient.send(m.clone()).unwrap();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ MessageBody::Receipt => {
|
|
|
+ let recipient = &db[message.group];
|
|
|
+ let body = message.body;
|
|
|
+ let m = Arc::new(SerializedMessage { header: buf, body });
|
|
|
+ recipient.send(m).unwrap();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // we never have to update the DB again, so repeat the above, skipping that step
|
|
|
loop {
|
|
|
log!("waiting for message from {} to {}", sender, group);
|
|
|
let buf = mgen::get_message_bytes(&mut socket).await?;
|
|
|
@@ -169,7 +191,7 @@ async fn get_messages(
|
|
|
let recipient = &db[message.group];
|
|
|
let body = message.body;
|
|
|
let m = Arc::new(SerializedMessage { header: buf, body });
|
|
|
- recipient.send(m.clone()).unwrap();
|
|
|
+ recipient.send(m).unwrap();
|
|
|
}
|
|
|
}
|
|
|
}
|