developmaunt -> mauster #1

Merged
DTieman merged 6 commits from developmaunt into mauster 2024-04-24 18:05:31 +00:00
5 changed files with 52 additions and 20 deletions
Showing only changes of commit 1e51defad5 - Show all commits

View File

@@ -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]

View File

@@ -2,17 +2,17 @@
public class GameState
{
public string PlayerName { get; set; }
public PlayerDTO Me { get; set; }
public string CurrentState { get; set; }
public List<string> Hand { get; set; } = new();
public string CurrentCard { get; set; }
public string CurrentPlayer { get; set; }
public List<string> Players { get; set; } = new();
public PlayerDTO CurrentPlayer { get; set; }
public List<PlayerDTO> 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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}

View File

@@ -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;
}