move a bunch of stuff into subfolders
This commit is contained in:
parent
8f281d65b2
commit
151cad4cee
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
using TanksServer.Helpers;
|
||||||
|
|
||||||
namespace TanksServer;
|
namespace TanksServer;
|
||||||
|
|
||||||
internal sealed class DisplayPixelBuffer(byte[] data)
|
internal sealed class DisplayPixelBuffer(byte[] data)
|
|
@ -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();
|
|
@ -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>
|
||||||
{
|
{
|
|
@ -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)
|
||||||
{
|
{
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
|
@ -1,4 +1,4 @@
|
||||||
namespace TanksServer;
|
namespace TanksServer.Services;
|
||||||
|
|
||||||
internal class MapDrawer(MapService map):ITickStep
|
internal class MapDrawer(MapService map):ITickStep
|
||||||
{
|
{
|
|
@ -1,4 +1,4 @@
|
||||||
namespace TanksServer;
|
namespace TanksServer.Services;
|
||||||
|
|
||||||
internal class MapService
|
internal class MapService
|
||||||
{
|
{
|
|
@ -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; }
|
|
@ -15,4 +15,10 @@
|
||||||
</Content>
|
</Content>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<AnalysisMode>Recommended</AnalysisMode>
|
||||||
|
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
||||||
|
<NoWarn>CA1805,CA1848</NoWarn>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|
Loading…
Reference in a new issue