diff options
author | metamuffin <metamuffin@disroot.org> | 2022-09-07 18:05:27 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2022-09-07 18:05:27 +0200 |
commit | 88241946e3144fede5c86f98d00bb723c1cc2761 (patch) | |
tree | acd61d75fbd48d09ff76541ab15a9703d7c98652 /server/src/room.rs | |
parent | 3ce9a53e272dc556222bca747461b3ec24796912 (diff) | |
download | keks-meet-88241946e3144fede5c86f98d00bb723c1cc2761.tar keks-meet-88241946e3144fede5c86f98d00bb723c1cc2761.tar.bz2 keks-meet-88241946e3144fede5c86f98d00bb723c1cc2761.tar.zst |
compiler crash………
Diffstat (limited to 'server/src/room.rs')
-rw-r--r-- | server/src/room.rs | 45 |
1 files changed, 35 insertions, 10 deletions
diff --git a/server/src/room.rs b/server/src/room.rs index 14ff9b6..43cfa90 100644 --- a/server/src/room.rs +++ b/server/src/room.rs @@ -7,12 +7,13 @@ use warp::ws::{Message, WebSocket}; #[derive(Debug)] pub struct Client { - out: mpsc::UnboundedSender<ClientboundPacket>, + pub name: String, + pub out: mpsc::UnboundedSender<ClientboundPacket>, } #[derive(Debug, Default)] pub struct Room { - clients: RwLock<HashMap<usize, Client>>, + pub clients: RwLock<HashMap<usize, Client>>, } impl Room { @@ -32,12 +33,20 @@ impl Room { } }); - let id = { - let mut g = self.clients.write().await; - let id = g.len(); - g.insert(id, Client { out: tx }); - id - }; + let mut g = self.clients.write().await; + let id = g.len(); + let name = format!("user no. {id}"); + g.insert( + id, + Client { + out: tx, + name: name.clone(), + }, + ); + drop(g); + + self.broadcast(id, ClientboundPacket::ClientJoin { id, name }) + .await; while let Some(result) = user_ws_rx.next().await { let msg = match result { @@ -62,10 +71,26 @@ impl Room { self.clients.write().await.remove(&id); } - pub async fn client_message(&self, sender: usize, packet: ServerboundPacket) { + pub async fn broadcast(&self, sender: usize, packet: ClientboundPacket) { for (&id, tx) in self.clients.read().await.iter() { if sender != id { - let _ = tx.out.send(todo!()); + let _ = tx.out.send(packet.clone()); + } + } + } + pub async fn send_to_client(&self, recipient: usize, packet: ClientboundPacket) { + if let Some(c) = self.clients.read().await.get(&recipient) { + let _ = c.out.send(packet); + } + } + + pub async fn client_message(&self, sender: usize, packet: ServerboundPacket) { + match packet { + ServerboundPacket::Relay { recipient, message } => { + if let Some(recipient) = recipient { + self.send_to_client(recipient, ClientboundPacket::Message { sender, message }) + .await; + } } } } |