From 95e74b194cc0f5315f41e518b5deb8b96306838a Mon Sep 17 00:00:00 2001 From: Bastian Gruber Date: Sat, 29 Apr 2023 10:01:48 +0200 Subject: [PATCH] Complete workflow, cowboy style --- problem_03/src/server.rs | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/problem_03/src/server.rs b/problem_03/src/server.rs index 64f51e0..2076f6c 100644 --- a/problem_03/src/server.rs +++ b/problem_03/src/server.rs @@ -17,8 +17,12 @@ type Error = Box; type Result = std::result::Result; type Username = String; +type Message = String; type Address = SocketAddr; +#[derive(Clone, Debug, Default)] +struct BroadcastMessage(Username, Message); + #[derive(Clone, Debug, Default)] struct Users(Arc>>); @@ -59,7 +63,11 @@ async fn main() -> Result<()> { info!("Adding username: {username} to db"); let _ = framed.send(message).await; info!("Send message to client"); - let _ = tx.send(format!("* {} has entered the room", username)); + let b = BroadcastMessage( + username.clone(), + format!("* {} has entered the room", username), + ); + let _ = tx.send(b); } Some(Err(e)) => { error!("Error parsing message: {e}"); @@ -76,7 +84,9 @@ async fn main() -> Result<()> { Some(Ok(n)) => { // broadcast message to all clients except the one who sent it info!("Receiving new chat message: {n}"); - let _ = tx.send(format!("[{}]: {}", name, n)); + let b = + BroadcastMessage(name.clone(), format!("[{}]: {}", name, n)); + let _ = tx.send(b); } Some(Err(e)) => { error!("Error receiving chat message: {e}"); @@ -86,14 +96,20 @@ async fn main() -> Result<()> { // remove client from db etc. // send leave message info!("No next frame"); - let _ = tx.send(format!("* {} has left the room", name)); + let b = + BroadcastMessage(name.clone(), format!("* {} has left the room", name)); + let _ = tx.send(b); break; } } } message = rx.recv() => { + let broadcast = message.clone().unwrap(); info!("Broadcast received: {:?}", message.clone().unwrap()); - let _ = framed.send(message.unwrap()).await; + if broadcast.0 != name { + let _ = framed.send(message.unwrap().1).await; + } + } } }