do not respawn inactive players

This commit is contained in:
Vinzenz Schroeter 2024-05-02 21:27:56 +02:00 committed by RobbersDaughter
parent cd12ab7bde
commit abad2c95c8
11 changed files with 91 additions and 48 deletions

View file

@ -1,16 +1,11 @@
using System.Buffers;
using System.Diagnostics;
using System.Net.WebSockets;
using DisplayCommands;
using TanksServer.Graphics;
namespace TanksServer.Interactivity;
internal sealed class ClientScreenServerConnection(
WebSocket webSocket,
ILogger<ClientScreenServerConnection> logger,
Player? player
) : WebsocketServerConnection(logger, new ByteChannelWebSocket(webSocket, logger, 0))
internal sealed class ClientScreenServerConnection : WebsocketServerConnection
{
private sealed record class Package(
IMemoryOwner<byte> PixelsOwner,
@ -20,12 +15,21 @@ internal sealed class ClientScreenServerConnection(
);
private readonly MemoryPool<byte> _memoryPool = MemoryPool<byte>.Shared;
private readonly PlayerScreenData? _playerDataBuilder;
private readonly Player? _player;
private int _wantsFrameOnTick = 1;
private Package? _next;
private readonly PlayerScreenData? _playerDataBuilder = player == null
? null
: new PlayerScreenData(logger, player);
public ClientScreenServerConnection(WebSocket webSocket,
ILogger<ClientScreenServerConnection> logger,
Player? player) : base(logger, new ByteChannelWebSocket(webSocket, logger, 0))
{
_player = player;
_player?.IncrementConnectionCount();
_playerDataBuilder = player == null
? null
: new PlayerScreenData(logger, player);
}
protected override ValueTask HandleMessageAsync(Memory<byte> _)
{
@ -72,6 +76,12 @@ internal sealed class ClientScreenServerConnection(
oldNext?.PlayerDataOwner?.Dispose();
}
public override ValueTask RemovedAsync()
{
_player?.DecrementConnectionCount();
return ValueTask.CompletedTask;
}
private async ValueTask SendAndDisposeAsync(Package package)
{
try