From 70c77160a99b0e7ef0e014d63a4a0946da6817ec Mon Sep 17 00:00:00 2001 From: Mark Lodato Date: Tue, 7 Apr 2020 08:14:02 -0400 Subject: [PATCH] Update example to not broadcast close messages. In the event that the client sends a close message, it is broadcast to other clients closing them as well. --- examples/server.rs | 46 ++++++++++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/examples/server.rs b/examples/server.rs index 5701793..8bb66de 100644 --- a/examples/server.rs +++ b/examples/server.rs @@ -52,26 +52,32 @@ async fn handle_connection(peer_map: PeerMap, raw_stream: TcpStream, addr: Socke let (outgoing, incoming) = ws_stream.split(); - let broadcast_incoming = incoming.try_for_each(|msg| { - println!( - "Received a message from {}: {}", - addr, - msg.to_text().unwrap() - ); - let peers = peer_map.lock().unwrap(); - - // We want to broadcast the message to everyone except ourselves. - let broadcast_recipients = peers - .iter() - .filter(|(peer_addr, _)| peer_addr != &&addr) - .map(|(_, ws_sink)| ws_sink); - - for recp in broadcast_recipients { - recp.unbounded_send(msg.clone()).unwrap(); - } - - future::ok(()) - }); + let broadcast_incoming = incoming + .try_filter(|msg| { + // Broadcasting a Close message from one client + // will close the other clients. + future::ready(!msg.is_close()) + }) + .try_for_each(|msg| { + println!( + "Received a message from {}: {}", + addr, + msg.to_text().unwrap() + ); + let peers = peer_map.lock().unwrap(); + + // We want to broadcast the message to everyone except ourselves. + let broadcast_recipients = peers + .iter() + .filter(|(peer_addr, _)| peer_addr != &&addr) + .map(|(_, ws_sink)| ws_sink); + + for recp in broadcast_recipients { + recp.unbounded_send(msg.clone()).unwrap(); + } + + future::ok(()) + }); let receive_from_others = rx.map(Ok).forward(outgoing);