servicepoint-tanks/TanksServer/Program.cs

56 lines
1.9 KiB
C#
Raw Normal View History

2024-04-06 16:38:26 +02:00
using System.IO;
using Microsoft.AspNetCore.Builder;
2024-04-06 20:32:54 +02:00
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
2024-04-06 16:38:26 +02:00
using Microsoft.Extensions.FileProviders;
namespace TanksServer;
internal static class Program
{
public static async Task Main(string[] args)
{
var app = Configure(args);
var display = app.Services.GetRequiredService<ServicePointDisplay>();
var mapDrawer = app.Services.GetRequiredService<MapDrawer>();
2024-04-06 16:38:26 +02:00
var clientScreenServer = app.Services.GetRequiredService<ClientScreenServer>();
var buffer = mapDrawer.CreateGameFieldPixelBuffer();
mapDrawer.DrawInto(buffer);
await display.Send(buffer);
2024-04-06 16:38:26 +02:00
var clientFileProvider = new PhysicalFileProvider(Path.Combine(app.Environment.ContentRootPath, "client"));
app.UseDefaultFiles(new DefaultFilesOptions { FileProvider = clientFileProvider });
app.UseStaticFiles(new StaticFileOptions { FileProvider = clientFileProvider });
2024-04-06 16:38:26 +02:00
app.UseWebSockets();
app.Map("/screen", async context =>
{
if (!context.WebSockets.IsWebSocketRequest)
2024-04-06 20:32:54 +02:00
{
context.Response.StatusCode = StatusCodes.Status400BadRequest;
return;
2024-04-06 20:32:54 +02:00
}
using var ws = await context.WebSockets.AcceptWebSocketAsync();
await clientScreenServer.HandleClient(ws);
});
await app.RunAsync();
}
private static WebApplication Configure(string[] args)
{
var builder = WebApplication.CreateSlimBuilder(args);
builder.Services.AddSingleton<ServicePointDisplay>();
builder.Services.AddSingleton<MapService>();
builder.Services.AddSingleton<MapDrawer>();
2024-04-06 16:38:26 +02:00
builder.Services.AddSingleton<ClientScreenServer>();
2024-04-06 20:32:54 +02:00
builder.Services.AddHostedService<ClientScreenServer>(sp => sp.GetRequiredService<ClientScreenServer>());
return builder.Build();
}
}