From 151cad4cee5229408a534cedebaac60f543eda23 Mon Sep 17 00:00:00 2001 From: Vinzenz Schroeter Date: Sun, 7 Apr 2024 11:19:14 +0200 Subject: [PATCH] move a bunch of stuff into subfolders --- TanksServer/ClientScreenServer.cs | 2 ++ TanksServer/ControlsServer.cs | 26 +++++++++---------- .../{ => Helpers}/AppSerializerContext.cs | 0 .../{ => Helpers}/DisplayPixelBuffer.cs | 2 ++ TanksServer/{ => Helpers}/EasyWebSocket.cs | 5 +++- .../{ => Helpers}/FixedSizeBitFieldView.cs | 2 +- .../{PlayerService.cs => PlayerServer.cs} | 9 +++++-- TanksServer/Program.cs | 5 ++-- TanksServer/{ => Services}/GameTickService.cs | 4 +-- TanksServer/{ => Services}/MapDrawer.cs | 2 +- TanksServer/{ => Services}/MapService.cs | 2 +- .../{ => Services}/ServicePointDisplay.cs | 6 ++--- TanksServer/TanksServer.csproj | 6 +++++ 13 files changed, 44 insertions(+), 27 deletions(-) rename TanksServer/{ => Helpers}/AppSerializerContext.cs (100%) rename TanksServer/{ => Helpers}/DisplayPixelBuffer.cs (97%) rename TanksServer/{ => Helpers}/EasyWebSocket.cs (95%) rename TanksServer/{ => Helpers}/FixedSizeBitFieldView.cs (98%) rename TanksServer/{PlayerService.cs => PlayerServer.cs} (78%) rename TanksServer/{ => Services}/GameTickService.cs (87%) rename TanksServer/{ => Services}/MapDrawer.cs (98%) rename TanksServer/{ => Services}/MapService.cs (98%) rename TanksServer/{ => Services}/ServicePointDisplay.cs (67%) diff --git a/TanksServer/ClientScreenServer.cs b/TanksServer/ClientScreenServer.cs index 5a741cd..8c9b4ce 100644 --- a/TanksServer/ClientScreenServer.cs +++ b/TanksServer/ClientScreenServer.cs @@ -1,6 +1,8 @@ using System.Net.WebSockets; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; +using TanksServer.Helpers; +using TanksServer.Services; namespace TanksServer; diff --git a/TanksServer/ControlsServer.cs b/TanksServer/ControlsServer.cs index 5d38f83..dfa520a 100644 --- a/TanksServer/ControlsServer.cs +++ b/TanksServer/ControlsServer.cs @@ -1,6 +1,7 @@ using System.Net.WebSockets; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; +using TanksServer.Helpers; namespace TanksServer; @@ -55,22 +56,19 @@ internal sealed class ControlsServer(ILogger logger, ILoggerFact protected override Task ReceiveAsync(ArraySegment buffer) { - logger.LogDebug("player input {} {}", buffer[0], buffer[1]); + var type = (MessageType)buffer[0]; + var control = (InputType)buffer[1]; + + logger.LogTrace("player input {} {} {}", player.Id, type, control); - bool isEnable; - switch ((MessageType)buffer[0]) + var isEnable = type switch { - case MessageType.Enable: - isEnable = true; - break; - case MessageType.Disable: - isEnable = false; - break; - default: - return CloseAsync(WebSocketCloseStatus.InvalidPayloadData, "invalid state"); - } + MessageType.Enable => true, + MessageType.Disable => false, + _ => throw new ArgumentException("invalid message type") + }; - switch ((InputType)buffer[1]) + switch (control) { case InputType.Forward: player.Controls.Forward = isEnable; @@ -88,7 +86,7 @@ internal sealed class ControlsServer(ILogger logger, ILoggerFact player.Controls.Shoot = isEnable; break; default: - return CloseAsync(WebSocketCloseStatus.InvalidPayloadData, "invalid control"); + throw new ArgumentException("invalid control type"); } return Task.CompletedTask; diff --git a/TanksServer/AppSerializerContext.cs b/TanksServer/Helpers/AppSerializerContext.cs similarity index 100% rename from TanksServer/AppSerializerContext.cs rename to TanksServer/Helpers/AppSerializerContext.cs diff --git a/TanksServer/DisplayPixelBuffer.cs b/TanksServer/Helpers/DisplayPixelBuffer.cs similarity index 97% rename from TanksServer/DisplayPixelBuffer.cs rename to TanksServer/Helpers/DisplayPixelBuffer.cs index 180dcdf..6f06445 100644 --- a/TanksServer/DisplayPixelBuffer.cs +++ b/TanksServer/Helpers/DisplayPixelBuffer.cs @@ -1,3 +1,5 @@ +using TanksServer.Helpers; + namespace TanksServer; internal sealed class DisplayPixelBuffer(byte[] data) diff --git a/TanksServer/EasyWebSocket.cs b/TanksServer/Helpers/EasyWebSocket.cs similarity index 95% rename from TanksServer/EasyWebSocket.cs rename to TanksServer/Helpers/EasyWebSocket.cs index 2889317..390885a 100644 --- a/TanksServer/EasyWebSocket.cs +++ b/TanksServer/Helpers/EasyWebSocket.cs @@ -1,8 +1,11 @@ using System.Net.WebSockets; using Microsoft.Extensions.Logging; -namespace TanksServer; +namespace TanksServer.Helpers; +/// +/// Hacky class for easier semantics +/// internal abstract class EasyWebSocket { private readonly TaskCompletionSource _completionSource = new(); diff --git a/TanksServer/FixedSizeBitFieldView.cs b/TanksServer/Helpers/FixedSizeBitFieldView.cs similarity index 98% rename from TanksServer/FixedSizeBitFieldView.cs rename to TanksServer/Helpers/FixedSizeBitFieldView.cs index 9b37fd4..35b5d03 100644 --- a/TanksServer/FixedSizeBitFieldView.cs +++ b/TanksServer/Helpers/FixedSizeBitFieldView.cs @@ -1,6 +1,6 @@ using System.Collections; -namespace TanksServer; +namespace TanksServer.Helpers; internal sealed class FixedSizeBitFieldView(Memory data) : IList { diff --git a/TanksServer/PlayerService.cs b/TanksServer/PlayerServer.cs similarity index 78% rename from TanksServer/PlayerService.cs rename to TanksServer/PlayerServer.cs index 7989004..eafb381 100644 --- a/TanksServer/PlayerService.cs +++ b/TanksServer/PlayerServer.cs @@ -4,11 +4,16 @@ using Microsoft.Extensions.Logging; namespace TanksServer; -internal sealed class PlayerService(ILogger logger) +internal sealed class PlayerServer(ILogger logger) { private readonly ConcurrentDictionary _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) { diff --git a/TanksServer/Program.cs b/TanksServer/Program.cs index 2c1c66c..a50658e 100644 --- a/TanksServer/Program.cs +++ b/TanksServer/Program.cs @@ -4,6 +4,7 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.FileProviders; +using TanksServer.Services; namespace TanksServer; @@ -17,7 +18,7 @@ internal static class Program app.UseWebSockets(); var clientScreenServer = app.Services.GetRequiredService(); - var playerService = app.Services.GetRequiredService(); + var playerService = app.Services.GetRequiredService(); var controlsServer = app.Services.GetRequiredService(); var clientFileProvider = new PhysicalFileProvider(Path.Combine(app.Environment.ContentRootPath, "client")); @@ -84,7 +85,7 @@ internal static class Program builder.Services.AddHostedService(); - builder.Services.AddSingleton(); + builder.Services.AddSingleton(); return builder.Build(); } diff --git a/TanksServer/GameTickService.cs b/TanksServer/Services/GameTickService.cs similarity index 87% rename from TanksServer/GameTickService.cs rename to TanksServer/Services/GameTickService.cs index 0cd80cc..07dfb80 100644 --- a/TanksServer/GameTickService.cs +++ b/TanksServer/Services/GameTickService.cs @@ -1,8 +1,8 @@ using Microsoft.Extensions.Hosting; -namespace TanksServer; +namespace TanksServer.Services; -public class GameTickService(IEnumerable steps) : IHostedService +internal sealed class GameTickService(IEnumerable steps) : IHostedService { private readonly CancellationTokenSource _cancellation = new(); private readonly List _steps = steps.ToList(); diff --git a/TanksServer/MapDrawer.cs b/TanksServer/Services/MapDrawer.cs similarity index 98% rename from TanksServer/MapDrawer.cs rename to TanksServer/Services/MapDrawer.cs index 58cc91f..ee41489 100644 --- a/TanksServer/MapDrawer.cs +++ b/TanksServer/Services/MapDrawer.cs @@ -1,4 +1,4 @@ -namespace TanksServer; +namespace TanksServer.Services; internal class MapDrawer(MapService map):ITickStep { diff --git a/TanksServer/MapService.cs b/TanksServer/Services/MapService.cs similarity index 98% rename from TanksServer/MapService.cs rename to TanksServer/Services/MapService.cs index 6599f71..be93d3d 100644 --- a/TanksServer/MapService.cs +++ b/TanksServer/Services/MapService.cs @@ -1,4 +1,4 @@ -namespace TanksServer; +namespace TanksServer.Services; internal class MapService { diff --git a/TanksServer/ServicePointDisplay.cs b/TanksServer/Services/ServicePointDisplay.cs similarity index 67% rename from TanksServer/ServicePointDisplay.cs rename to TanksServer/Services/ServicePointDisplay.cs index 018fe6e..250fc55 100644 --- a/TanksServer/ServicePointDisplay.cs +++ b/TanksServer/Services/ServicePointDisplay.cs @@ -1,9 +1,9 @@ using System.Net.Sockets; using Microsoft.Extensions.Options; -namespace TanksServer; +namespace TanksServer.Services; -internal class ServicePointDisplay(IOptions options) +internal sealed class ServicePointDisplay(IOptions options) { private readonly UdpClient _udpClient = new(options.Value.Hostname, options.Value.Port); @@ -13,7 +13,7 @@ internal class ServicePointDisplay(IOptions op } } -internal class ServicePointDisplayConfiguration +internal sealed class ServicePointDisplayConfiguration { public string Hostname { get; set; } = string.Empty; public int Port { get; set; } diff --git a/TanksServer/TanksServer.csproj b/TanksServer/TanksServer.csproj index ef4cbb5..4f56b75 100644 --- a/TanksServer/TanksServer.csproj +++ b/TanksServer/TanksServer.csproj @@ -14,5 +14,11 @@ .dockerignore + + + Recommended + true + CA1805,CA1848 +