servicepoint-tanks/tanks-backend/TanksServer/Interactivity/WebsocketServerConnection.cs

31 lines
824 B
C#
Raw Normal View History

namespace TanksServer.Interactivity;
internal abstract class WebsocketServerConnection(
ILogger logger,
2024-04-22 19:03:07 +02:00
ByteChannelWebSocket socket
2024-04-28 15:34:32 +02:00
) : IDisposable
{
2024-04-28 15:34:32 +02:00
private readonly SemaphoreSlim _mutex = new(1);
protected readonly ByteChannelWebSocket Socket = socket;
2024-04-22 19:03:07 +02:00
protected readonly ILogger Logger = logger;
public Task CloseAsync()
{
2024-04-22 19:03:07 +02:00
Logger.LogDebug("closing connection");
return Socket.CloseAsync();
}
public async Task ReceiveAsync()
{
await foreach (var buffer in Socket.ReadAllAsync())
await HandleMessageAsync(buffer);
2024-04-22 19:03:07 +02:00
Logger.LogTrace("done receiving");
}
2024-05-02 21:27:56 +02:00
public abstract ValueTask RemovedAsync();
2024-04-28 15:34:32 +02:00
2024-05-02 21:27:56 +02:00
protected abstract ValueTask HandleMessageAsync(Memory<byte> buffer);
2024-04-28 15:34:32 +02:00
2024-05-02 21:27:56 +02:00
public virtual void Dispose() => _mutex.Dispose();
}