1st json over websocket test
This commit is contained in:
@@ -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()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user