diff --git a/Controllers/RoomController.cs b/Controllers/RoomController.cs index ff786d9..7d5af5e 100644 --- a/Controllers/RoomController.cs +++ b/Controllers/RoomController.cs @@ -1,4 +1,5 @@ -using System.Text.Json; +using System.Text; +using System.Text.Json; using MauMau_Server.Websockets; using Microsoft.AspNetCore.Mvc; @@ -24,24 +25,27 @@ public class RoomController : ControllerBase return Ok(rooms); } - [HttpGet("{id}")] - public async Task ConnectToRoom(string id) + [HttpGet("{id}/{name}")] + public async Task ConnectToRoom(string id, string name) { + var response = HttpContext.Response; if (!HttpContext.WebSockets.IsWebSocketRequest) { - HttpContext.Response.StatusCode = 400; + response.StatusCode = 400; + await response.BodyWriter.WriteAsync("Request is not a websocket request"u8.ToArray()); return; } if (!_roomManager.RoomExists(id)) { - HttpContext.Response.StatusCode = 404; + response.StatusCode = 404; + await response.BodyWriter.WriteAsync("Room could not be found"u8.ToArray()); return; } using var webSocket = await HttpContext.WebSockets.AcceptWebSocketAsync(); var room = _roomManager.GetRoom(id); - await room.InstantiateConnection(webSocket); + await room.InstantiateConnection(webSocket, name); } [HttpPost] diff --git a/Mau/GameState.cs b/Mau/GameState.cs index 470fd70..8afcf41 100644 --- a/Mau/GameState.cs +++ b/Mau/GameState.cs @@ -2,17 +2,17 @@ public class GameState { - public string PlayerName { get; set; } + public PlayerDTO Me { get; set; } public string CurrentState { get; set; } public List Hand { get; set; } = new(); public string CurrentCard { get; set; } - public string CurrentPlayer { get; set; } - public List Players { get; set; } = new(); + public PlayerDTO CurrentPlayer { get; set; } + public List Players { get; set; } = new(); public GameState(Game game, string playerId) { var p = game.GetPlayer(playerId); - PlayerName = p.Connection.ConnectionId; + Me = new PlayerDTO(game.GetPlayer(playerId)); CurrentState = p.State.ToString(); foreach (var card in p.Hand) { @@ -21,10 +21,22 @@ public class GameState foreach (var player in game.Players) { - Players.Add(player.Connection.ConnectionId); + Players.Add(new PlayerDTO(player)); } CurrentCard = game.CurrentCard.ToString(); - CurrentPlayer = game.CurrentPlayer.Connection.ConnectionId; + CurrentPlayer = new PlayerDTO(game.CurrentPlayer); + } +} + +public class PlayerDTO +{ + public string Name { get; set; } + public string Id { get; set; } + + public PlayerDTO(Player player) + { + Name = player.Connection.Name; + Id = player.Connection.ConnectionId; } } \ No newline at end of file diff --git a/Room/Chat/Chat.cs b/Room/Chat/Chat.cs index 0e22051..e6d7b56 100644 --- a/Room/Chat/Chat.cs +++ b/Room/Chat/Chat.cs @@ -13,10 +13,24 @@ public class Chat _room = room; } - public void SendChatMessage(string connectionId, string message) + public void SendChatMessage(ConnectionInstance connection, string message) { - var chatMessage = new ChatOutput(connectionId, message); + var chatMessage = new ChatMessage(DateTime.UtcNow, connection.Name, message); var formattedMessage = new MessageDTO("CHAT", JsonSerializer.Serialize(chatMessage)); WebsocketManager.BroadcastAsync(_room.GetWebsockets(), JsonSerializer.Serialize(formattedMessage)); } +} + +public class ChatMessage +{ + public DateTime Time { get; set; } + public string Sender { get; set; } + public string Message { get; set; } + + public ChatMessage(DateTime dateTime, string sender, string message) + { + Time = dateTime; + Sender = sender; + Message = message; + } } \ No newline at end of file diff --git a/Room/Room.cs b/Room/Room.cs index 9081ff4..d0c4cc7 100644 --- a/Room/Room.cs +++ b/Room/Room.cs @@ -20,9 +20,9 @@ public class Room _roomId = roomId; } - public async Task InstantiateConnection(WebSocket socket) + public async Task InstantiateConnection(WebSocket socket, string name) { - var connection = AddConnection(socket); + var connection = AddConnection(socket, name); if (IsEmpty()) _host = connection; _game.AddPlayerToGame(connection); await HandleConnection(connection); @@ -45,7 +45,7 @@ public class Room } case "CHAT": { - _chat.SendChatMessage(connection.ConnectionId, message.Payload); + _chat.SendChatMessage(connection, message.Payload); break; } } @@ -57,10 +57,10 @@ public class Room HandleDisconnect(connection.ConnectionId); } - private ConnectionInstance AddConnection(WebSocket socket) + private ConnectionInstance AddConnection(WebSocket socket, string name) { var connectionId = Guid.NewGuid().ToString(); - var connection = new ConnectionInstance(connectionId, socket); + var connection = new ConnectionInstance(name, connectionId, socket); _connections.Add(connection); return connection; } diff --git a/Websockets/ConnectionInstance.cs b/Websockets/ConnectionInstance.cs index 64357d9..8b1884d 100644 --- a/Websockets/ConnectionInstance.cs +++ b/Websockets/ConnectionInstance.cs @@ -4,11 +4,13 @@ namespace MauMau_Server.Websockets; public class ConnectionInstance { + public string Name { get; set; } public string ConnectionId { get; set; } public WebSocket Socket { get; set; } - public ConnectionInstance(string connectionId, WebSocket socket) + public ConnectionInstance(string name, string connectionId, WebSocket socket) { + Name = name; ConnectionId = connectionId; Socket = socket; }