move a bunch of stuff into subfolders
This commit is contained in:
		
							parent
							
								
									8f281d65b2
								
							
						
					
					
						commit
						151cad4cee
					
				
					 13 changed files with 44 additions and 27 deletions
				
			
		|  | @ -1,6 +1,8 @@ | |||
| using System.Net.WebSockets; | ||||
| using Microsoft.Extensions.Hosting; | ||||
| using Microsoft.Extensions.Logging; | ||||
| using TanksServer.Helpers; | ||||
| using TanksServer.Services; | ||||
| 
 | ||||
| namespace TanksServer; | ||||
| 
 | ||||
|  |  | |||
|  | @ -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<ControlsServer> logger, ILoggerFact | |||
| 
 | ||||
|         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]; | ||||
|              | ||||
|             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<ControlsServer> logger, ILoggerFact | |||
|                     player.Controls.Shoot = isEnable; | ||||
|                     break; | ||||
|                 default: | ||||
|                     return CloseAsync(WebSocketCloseStatus.InvalidPayloadData, "invalid control"); | ||||
|                     throw new ArgumentException("invalid control type"); | ||||
|             } | ||||
| 
 | ||||
|             return Task.CompletedTask; | ||||
|  |  | |||
|  | @ -1,3 +1,5 @@ | |||
| using TanksServer.Helpers; | ||||
| 
 | ||||
| namespace TanksServer; | ||||
| 
 | ||||
| internal sealed class DisplayPixelBuffer(byte[] data) | ||||
|  | @ -1,8 +1,11 @@ | |||
| using System.Net.WebSockets; | ||||
| using Microsoft.Extensions.Logging; | ||||
| 
 | ||||
| namespace TanksServer; | ||||
| namespace TanksServer.Helpers; | ||||
| 
 | ||||
| /// <summary> | ||||
| /// Hacky class for easier semantics | ||||
| /// </summary> | ||||
| internal abstract class EasyWebSocket | ||||
| { | ||||
|     private readonly TaskCompletionSource _completionSource = new(); | ||||
|  | @ -1,6 +1,6 @@ | |||
| using System.Collections; | ||||
| 
 | ||||
| namespace TanksServer; | ||||
| namespace TanksServer.Helpers; | ||||
| 
 | ||||
| internal sealed class FixedSizeBitFieldView(Memory<byte> data) : IList<bool> | ||||
| { | ||||
|  | @ -4,11 +4,16 @@ using Microsoft.Extensions.Logging; | |||
| 
 | ||||
| namespace TanksServer; | ||||
| 
 | ||||
| internal sealed class PlayerService(ILogger<PlayerService> logger) | ||||
| internal sealed class PlayerServer(ILogger<PlayerServer> logger) | ||||
| { | ||||
|     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) | ||||
|     { | ||||
|  | @ -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<ClientScreenServer>(); | ||||
|         var playerService = app.Services.GetRequiredService<PlayerService>(); | ||||
|         var playerService = app.Services.GetRequiredService<PlayerServer>(); | ||||
|         var controlsServer = app.Services.GetRequiredService<ControlsServer>(); | ||||
| 
 | ||||
|         var clientFileProvider = new PhysicalFileProvider(Path.Combine(app.Environment.ContentRootPath, "client")); | ||||
|  | @ -84,7 +85,7 @@ internal static class Program | |||
| 
 | ||||
|         builder.Services.AddHostedService<GameTickService>(); | ||||
| 
 | ||||
|         builder.Services.AddSingleton<PlayerService>(); | ||||
|         builder.Services.AddSingleton<PlayerServer>(); | ||||
| 
 | ||||
|         return builder.Build(); | ||||
|     } | ||||
|  |  | |||
|  | @ -1,8 +1,8 @@ | |||
| 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 List<ITickStep> _steps = steps.ToList(); | ||||
|  | @ -1,4 +1,4 @@ | |||
| namespace TanksServer; | ||||
| namespace TanksServer.Services; | ||||
| 
 | ||||
| internal class MapDrawer(MapService map):ITickStep | ||||
| { | ||||
|  | @ -1,4 +1,4 @@ | |||
| namespace TanksServer; | ||||
| namespace TanksServer.Services; | ||||
| 
 | ||||
| internal class MapService | ||||
| { | ||||
|  | @ -1,9 +1,9 @@ | |||
| using System.Net.Sockets; | ||||
| 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); | ||||
| 
 | ||||
|  | @ -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 int Port { get; set; } | ||||
|  | @ -14,5 +14,11 @@ | |||
|             <Link>.dockerignore</Link> | ||||
|         </Content> | ||||
|     </ItemGroup> | ||||
|      | ||||
|     <PropertyGroup> | ||||
|         <AnalysisMode>Recommended</AnalysisMode> | ||||
|         <TreatWarningsAsErrors>true</TreatWarningsAsErrors> | ||||
|         <NoWarn>CA1805,CA1848</NoWarn> | ||||
|     </PropertyGroup> | ||||
| 
 | ||||
| </Project> | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Vinzenz Schroeter
						Vinzenz Schroeter