Allow joining an existing room and validating tile placement

This commit is contained in:
2023-02-23 21:00:00 +01:00
parent f1564ca6e3
commit ec6542aa52
7 changed files with 149 additions and 10 deletions

View File

@@ -4,7 +4,7 @@ mod room;
use crate::room::{generate_room_name, Room, RoomHandle};
use anyhow::Result;
use async_tungstenite::WebSocketStream;
use board_network::protocol::ClientMessage;
use board_network::protocol::{ClientMessage, ServerMessage};
use futures::channel::mpsc::{unbounded, UnboundedSender};
use futures::future::join;
use futures::{future, SinkExt, StreamExt};
@@ -94,6 +94,23 @@ async fn handle_connection(
return Ok(());
}
ClientMessage::JoinRoom(room_name, player_name) => {
let handle = rooms.lock().unwrap().get_mut(&room_name).cloned();
if let Some(h) = handle {
println!("[{addr}] Joining room '{room_name}' for player '{player_name}'");
run_player(player_name, addr, h, ws_stream).await;
return Ok(());
} else {
ws_stream
.send(WebsocketMessage::Text(
serde_json::to_string(&ServerMessage::JoinFailed(
"Could not find room".to_string(),
))
.unwrap(),
))
.await?;
}
}
msg => eprintln!("[{addr}] Received illegal message {msg:?}"),
}
}