1st json over websocket test

This commit is contained in:
2023-03-16 15:20:28 +01:00
parent 405a14ad28
commit 4f85f6f793
7 changed files with 181 additions and 5 deletions

View File

@@ -1,11 +1,16 @@
using System.Net.WebSockets;
using System.Text;
using System.Text.Json;
using MauMau_Server.Mau;
namespace MauMau_Server.Websockets;
public class Room
{
private readonly Dictionary<string, WebSocket> _connections = new();
private readonly Deck _deck = new();
private Card currentCard;
private List<Card> hand = new();
public async Task InstantiateConnection(WebSocket socket)
{
@@ -15,12 +20,16 @@ public class Room
private async Task HandleConnection(WebSocket socket, string socketId)
{
hand = _deck.DrawCards(8);
SendAsync(socket, JsonSerializer.Serialize(new HandDTO(hand)));
var buffer = EmptyBuffer();
var result = await ReceiveAsync(socket, buffer);
while (!result.CloseStatus.HasValue)
{
var message = $"{socketId}: {Encoding.Default.GetString(buffer)}";
BroadcastAsync(message);
var slicedBuffer = buffer[0..result.Count];
var playedCard = JsonSerializer.Deserialize<CardDTO>(slicedBuffer).ToCard();
BroadcastAsync(JsonSerializer.Serialize(playedCard.ToString()));
SendAsync(socket, JsonSerializer.Serialize(new HandDTO(hand)));
buffer = EmptyBuffer();
result = await ReceiveAsync(socket, buffer);
}
@@ -59,13 +68,18 @@ public class Room
private void BroadcastAsync(string message)
{
var bytes = Encoding.Default.GetBytes(message);
var arraySegment = new ArraySegment<byte>(bytes);
foreach (var (id, socket) in GetAllConnections())
{
socket.SendAsync(arraySegment, WebSocketMessageType.Text, true, CancellationToken.None);
SendAsync(socket, message);
}
}
private void SendAsync(WebSocket socket, string message)
{
var bytes = Encoding.Default.GetBytes(message);
var arraySegment = new ArraySegment<byte>(bytes);
socket.SendAsync(arraySegment, WebSocketMessageType.Text, true, CancellationToken.None);
}
private static byte[] EmptyBuffer()
{