move a bunch of stuff into subfolders

This commit is contained in:
Vinzenz Schroeter 2024-04-07 11:19:14 +02:00
parent 8f281d65b2
commit 151cad4cee
13 changed files with 44 additions and 27 deletions

View file

@ -1,6 +1,8 @@
using System.Net.WebSockets; using System.Net.WebSockets;
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using TanksServer.Helpers;
using TanksServer.Services;
namespace TanksServer; namespace TanksServer;

View file

@ -1,6 +1,7 @@
using System.Net.WebSockets; using System.Net.WebSockets;
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using TanksServer.Helpers;
namespace TanksServer; namespace TanksServer;
@ -55,22 +56,19 @@ internal sealed class ControlsServer(ILogger<ControlsServer> logger, ILoggerFact
protected override Task ReceiveAsync(ArraySegment<byte> buffer) protected override Task ReceiveAsync(ArraySegment<byte> buffer)
{ {
logger.LogDebug("player input {} {}", buffer[0], buffer[1]); var type = (MessageType)buffer[0];
var control = (InputType)buffer[1];
bool isEnable; logger.LogTrace("player input {} {} {}", player.Id, type, control);
switch ((MessageType)buffer[0])
var isEnable = type switch
{ {
case MessageType.Enable: MessageType.Enable => true,
isEnable = true; MessageType.Disable => false,
break; _ => throw new ArgumentException("invalid message type")
case MessageType.Disable: };
isEnable = false;
break;
default:
return CloseAsync(WebSocketCloseStatus.InvalidPayloadData, "invalid state");
}
switch ((InputType)buffer[1]) switch (control)
{ {
case InputType.Forward: case InputType.Forward:
player.Controls.Forward = isEnable; player.Controls.Forward = isEnable;
@ -88,7 +86,7 @@ internal sealed class ControlsServer(ILogger<ControlsServer> logger, ILoggerFact
player.Controls.Shoot = isEnable; player.Controls.Shoot = isEnable;
break; break;
default: default:
return CloseAsync(WebSocketCloseStatus.InvalidPayloadData, "invalid control"); throw new ArgumentException("invalid control type");
} }
return Task.CompletedTask; return Task.CompletedTask;

View file

@ -1,3 +1,5 @@
using TanksServer.Helpers;
namespace TanksServer; namespace TanksServer;
internal sealed class DisplayPixelBuffer(byte[] data) internal sealed class DisplayPixelBuffer(byte[] data)

View file

@ -1,8 +1,11 @@
using System.Net.WebSockets; using System.Net.WebSockets;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
namespace TanksServer; namespace TanksServer.Helpers;
/// <summary>
/// Hacky class for easier semantics
/// </summary>
internal abstract class EasyWebSocket internal abstract class EasyWebSocket
{ {
private readonly TaskCompletionSource _completionSource = new(); private readonly TaskCompletionSource _completionSource = new();

View file

@ -1,6 +1,6 @@
using System.Collections; using System.Collections;
namespace TanksServer; namespace TanksServer.Helpers;
internal sealed class FixedSizeBitFieldView(Memory<byte> data) : IList<bool> internal sealed class FixedSizeBitFieldView(Memory<byte> data) : IList<bool>
{ {

View file

@ -4,11 +4,16 @@ using Microsoft.Extensions.Logging;
namespace TanksServer; namespace TanksServer;
internal sealed class PlayerService(ILogger<PlayerService> logger) internal sealed class PlayerServer(ILogger<PlayerServer> logger)
{ {
private readonly ConcurrentDictionary<string, Player> _players = new(); private readonly ConcurrentDictionary<string, Player> _players = new();
public Player GetOrAdd(string name) => _players.GetOrAdd(name, _ => new Player(name)); public Player GetOrAdd(string name)
{
var player = _players.GetOrAdd(name, _ => new Player(name));
logger.LogInformation("player {} (re)joined", player.Id);
return player;
}
public bool TryGet(Guid? playerId, [MaybeNullWhen(false)] out Player foundPlayer) public bool TryGet(Guid? playerId, [MaybeNullWhen(false)] out Player foundPlayer)
{ {

View file

@ -4,6 +4,7 @@ using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.FileProviders; using Microsoft.Extensions.FileProviders;
using TanksServer.Services;
namespace TanksServer; namespace TanksServer;
@ -17,7 +18,7 @@ internal static class Program
app.UseWebSockets(); app.UseWebSockets();
var clientScreenServer = app.Services.GetRequiredService<ClientScreenServer>(); var clientScreenServer = app.Services.GetRequiredService<ClientScreenServer>();
var playerService = app.Services.GetRequiredService<PlayerService>(); var playerService = app.Services.GetRequiredService<PlayerServer>();
var controlsServer = app.Services.GetRequiredService<ControlsServer>(); var controlsServer = app.Services.GetRequiredService<ControlsServer>();
var clientFileProvider = new PhysicalFileProvider(Path.Combine(app.Environment.ContentRootPath, "client")); var clientFileProvider = new PhysicalFileProvider(Path.Combine(app.Environment.ContentRootPath, "client"));
@ -84,7 +85,7 @@ internal static class Program
builder.Services.AddHostedService<GameTickService>(); builder.Services.AddHostedService<GameTickService>();
builder.Services.AddSingleton<PlayerService>(); builder.Services.AddSingleton<PlayerServer>();
return builder.Build(); return builder.Build();
} }

View file

@ -1,8 +1,8 @@
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting;
namespace TanksServer; namespace TanksServer.Services;
public class GameTickService(IEnumerable<ITickStep> steps) : IHostedService internal sealed class GameTickService(IEnumerable<ITickStep> steps) : IHostedService
{ {
private readonly CancellationTokenSource _cancellation = new(); private readonly CancellationTokenSource _cancellation = new();
private readonly List<ITickStep> _steps = steps.ToList(); private readonly List<ITickStep> _steps = steps.ToList();

View file

@ -1,4 +1,4 @@
namespace TanksServer; namespace TanksServer.Services;
internal class MapDrawer(MapService map):ITickStep internal class MapDrawer(MapService map):ITickStep
{ {

View file

@ -1,4 +1,4 @@
namespace TanksServer; namespace TanksServer.Services;
internal class MapService internal class MapService
{ {

View file

@ -1,9 +1,9 @@
using System.Net.Sockets; using System.Net.Sockets;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
namespace TanksServer; namespace TanksServer.Services;
internal class ServicePointDisplay(IOptions<ServicePointDisplayConfiguration> options) internal sealed class ServicePointDisplay(IOptions<ServicePointDisplayConfiguration> options)
{ {
private readonly UdpClient _udpClient = new(options.Value.Hostname, options.Value.Port); private readonly UdpClient _udpClient = new(options.Value.Hostname, options.Value.Port);
@ -13,7 +13,7 @@ internal class ServicePointDisplay(IOptions<ServicePointDisplayConfiguration> op
} }
} }
internal class ServicePointDisplayConfiguration internal sealed class ServicePointDisplayConfiguration
{ {
public string Hostname { get; set; } = string.Empty; public string Hostname { get; set; } = string.Empty;
public int Port { get; set; } public int Port { get; set; }

View file

@ -15,4 +15,10 @@
</Content> </Content>
</ItemGroup> </ItemGroup>
<PropertyGroup>
<AnalysisMode>Recommended</AnalysisMode>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<NoWarn>CA1805,CA1848</NoWarn>
</PropertyGroup>
</Project> </Project>