Allow joining an existing room and validating tile placement
This commit is contained in:
@@ -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:?}"),
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user