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

78 lines
2 KiB
C#
Raw Normal View History

2024-04-21 23:00:44 +02:00
using System.Net.WebSockets;
namespace TanksServer.Interactivity;
2024-05-02 21:27:56 +02:00
internal sealed class ControlsServerConnection : WebsocketServerConnection
2024-04-21 23:00:44 +02:00
{
2024-05-02 21:27:56 +02:00
private readonly Player _player;
public ControlsServerConnection(WebSocket socket,
ILogger<ControlsServerConnection> logger,
Player player) : base(logger, new ByteChannelWebSocket(socket, logger, 2))
{
_player = player;
_player.IncrementConnectionCount();
}
2024-04-21 23:00:44 +02:00
private enum MessageType : byte
{
Enable = 0x01,
Disable = 0x02
}
private enum InputType : byte
{
Forward = 0x01,
Backward = 0x02,
Left = 0x03,
Right = 0x04,
Shoot = 0x05
}
protected override ValueTask HandleMessageAsync(Memory<byte> buffer)
{
var type = (MessageType)buffer.Span[0];
var control = (InputType)buffer.Span[1];
2024-05-02 21:27:56 +02:00
Logger.LogTrace("player input {} {} {}", _player.Name, type, control);
var isEnable = type switch
{
MessageType.Enable => true,
MessageType.Disable => false,
_ => throw new ArgumentException("invalid message type")
};
2024-05-02 21:27:56 +02:00
_player.LastInput = DateTime.Now;
switch (control)
{
case InputType.Forward:
2024-05-02 21:27:56 +02:00
_player.Controls.Forward = isEnable;
break;
case InputType.Backward:
2024-05-02 21:27:56 +02:00
_player.Controls.Backward = isEnable;
break;
case InputType.Left:
2024-05-02 21:27:56 +02:00
_player.Controls.TurnLeft = isEnable;
break;
case InputType.Right:
2024-05-02 21:27:56 +02:00
_player.Controls.TurnRight = isEnable;
break;
case InputType.Shoot:
2024-05-02 21:27:56 +02:00
_player.Controls.Shoot = isEnable;
break;
default:
throw new ArgumentException("invalid control type");
}
2024-04-22 19:03:07 +02:00
return ValueTask.CompletedTask;
}
2024-05-02 21:27:56 +02:00
public override ValueTask RemovedAsync()
{
_player.DecrementConnectionCount();
return ValueTask.CompletedTask;
}
2024-04-21 23:00:44 +02:00
}