36 lines
1.2 KiB
C#
36 lines
1.2 KiB
C#
using System.Net.WebSockets;
|
|
using System.Text;
|
|
|
|
namespace MauMau_Server.Websockets;
|
|
|
|
public static class WebsocketManager
|
|
{
|
|
public static 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);
|
|
}
|
|
|
|
public static void BroadcastAsync(List<WebSocket> sockets, string message)
|
|
{
|
|
foreach (var socket in sockets)
|
|
{
|
|
SendAsync(socket, message);
|
|
}
|
|
}
|
|
|
|
public static async Task<WebSocketResponse> ReceiveAsync(WebSocket webSocket)
|
|
{
|
|
var buffer = new byte[4096];
|
|
var arraySegment = new ArraySegment<byte>(buffer);
|
|
var result = await webSocket.ReceiveAsync(arraySegment, CancellationToken.None);
|
|
var slicedBuffer = buffer[0..result.Count];
|
|
return new WebSocketResponse(result, slicedBuffer);
|
|
}
|
|
|
|
public static async void CloseAsync(WebSocket webSocket, WebSocketReceiveResult result)
|
|
{
|
|
await webSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None);
|
|
}
|
|
} |