first phase of rewrite done, server stores connections with an id, currently works as a hub, next phase to handle custom message types

This commit is contained in:
2025-11-12 12:49:42 +01:00
parent 4daa21e8bf
commit 4123a710cf
3 changed files with 27 additions and 4 deletions

View File

@@ -0,0 +1,19 @@
use crate::ConnectionMap;
use futures_util::SinkExt;
use tokio_tungstenite::tungstenite::Message as WsMessage;
pub async fn broadcast_message(connections: &ConnectionMap, msg: &WsMessage) {
let mut dead = vec![];
let mut map = connections.lock().await;
for (id, tx) in map.iter_mut() {
if let Err(e) = tx.send(msg.clone()).await {
eprintln!("Failed to send to {id}: {e}");
dead.push(*id);
}
}
for id in dead {
map.remove(&id);
}
}

View File

@@ -1,10 +1,11 @@
use futures_util::{SinkExt, StreamExt};
use tokio_tungstenite::{accept_async, tungstenite::Message as WsMessage};
use crate::ConnectionMap;
use futures_util::StreamExt;
use tokio_tungstenite::accept_async;
use uuid::Uuid;
use crate::ConnectionMap;
use super::broadcast_message::broadcast_message;
async fn handle_connection(stream: tokio::net::TcpStream, connections: ConnectionMap) {
pub async fn handle_connection(stream: tokio::net::TcpStream, connections: ConnectionMap) {
let ws_stream = accept_async(stream).await.unwrap();
let (write, mut read) = ws_stream.split();

View File

@@ -7,8 +7,11 @@ use tokio::sync::Mutex;
use tokio_tungstenite::accept_async;
use uuid::Uuid;
mod broadcast_message;
mod handle_connection;
use handle_connection::handle_connection;
#[derive(Serialize, Deserialize, Debug)]
struct MessageData {
username: String,