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:
19
server/src/broadcast_message.rs
Normal file
19
server/src/broadcast_message.rs
Normal 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);
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user