From b54c00324432e76e1fcd8d529a9ee5f7a27a3d2d Mon Sep 17 00:00:00 2001 From: ntr Date: Wed, 23 Aug 2023 12:56:28 +1000 Subject: [PATCH] server init --- Assets/Src/ShipControls.cs | 6 +-- Assets/Src/UI/ControlsUI.cs | 2 +- Server/.env | 3 ++ Server/.gitignore | 47 ++++++++++++++++++++++ Server/Controllers/CompletionController.cs | 20 +++++++++ Server/Dockerfile | 15 +++++++ Server/Models/Completion.cs | 9 +++++ Server/Program.cs | 21 ++++++++++ Server/Properties/launchSettings.json | 41 +++++++++++++++++++ Server/Repositories/SpaceRaceDbContext.cs | 16 ++++++++ Server/appsettings.Development.json | 11 +++++ Server/appsettings.json | 9 +++++ Server/docker-compose.yaml | 18 +++++++++ TODO.md | 1 - 14 files changed, 213 insertions(+), 6 deletions(-) create mode 100644 Server/.env create mode 100644 Server/.gitignore create mode 100644 Server/Controllers/CompletionController.cs create mode 100644 Server/Dockerfile create mode 100644 Server/Models/Completion.cs create mode 100644 Server/Program.cs create mode 100644 Server/Properties/launchSettings.json create mode 100644 Server/Repositories/SpaceRaceDbContext.cs create mode 100644 Server/appsettings.Development.json create mode 100644 Server/appsettings.json create mode 100644 Server/docker-compose.yaml diff --git a/Assets/Src/ShipControls.cs b/Assets/Src/ShipControls.cs index 96b3bef..e72320c 100755 --- a/Assets/Src/ShipControls.cs +++ b/Assets/Src/ShipControls.cs @@ -28,6 +28,8 @@ public class ShipControls : MonoBehaviour { public PowerUnit powerUnit = new(); + public float Speed => rigidBody.velocity.magnitude; + void Start() { Cursor.lockState = CursorLockMode.Locked; rigidBody = GetComponent(); @@ -160,10 +162,6 @@ public class ShipControls : MonoBehaviour { timing.StartTimer(); } - public float Speed() { - return rigidBody.velocity.magnitude; - } - public void Damage(float amt, string src) { Debug.Log($"Damage {amt} from {src}"); diff --git a/Assets/Src/UI/ControlsUI.cs b/Assets/Src/UI/ControlsUI.cs index 2c20050..0640ed5 100644 --- a/Assets/Src/UI/ControlsUI.cs +++ b/Assets/Src/UI/ControlsUI.cs @@ -93,7 +93,7 @@ public class ControlsUI : MonoBehaviour { return; } - speed.text = $"{ship.Speed():0}"; + speed.text = $"{ship.Speed:0}"; shield.detail = ship.powerUnit.ShieldPct switch { "100" => "", string pct => pct, diff --git a/Server/.env b/Server/.env new file mode 100644 index 0000000..c40525f --- /dev/null +++ b/Server/.env @@ -0,0 +1,3 @@ +POSTGRES_USER="spacerace" +POSTGRES_DB="spacerace" +POSTGRES_PASSWORD="zoomzoom" diff --git a/Server/.gitignore b/Server/.gitignore new file mode 100644 index 0000000..0249a7c --- /dev/null +++ b/Server/.gitignore @@ -0,0 +1,47 @@ +db/ + +# ----------------- + +*.swp +*.*~ +project.lock.json +.DS_Store +*.pyc +nupkg/ + +# Visual Studio Code +.vscode/ + +# Rider +.idea/ + +# Visual Studio +.vs/ + +# Fleet +.fleet/ + +# Code Rush +.cr/ + +# User-specific files +*.suo +*.user +*.userosscache +*.sln.docstates + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +build/ +bld/ +[Bb]in/ +[Oo]bj/ +[Oo]ut/ +msbuild.log +msbuild.err +msbuild.wrn \ No newline at end of file diff --git a/Server/Controllers/CompletionController.cs b/Server/Controllers/CompletionController.cs new file mode 100644 index 0000000..7fb8dbe --- /dev/null +++ b/Server/Controllers/CompletionController.cs @@ -0,0 +1,20 @@ +using Microsoft.AspNetCore.Mvc; + +using Server.Models; + +namespace Server.Controllers; + +[ApiController] +[Route("[controller]")] +public class CompletionController : ControllerBase { + private readonly ILogger _logger; + + public CompletionController(ILogger logger) { + _logger = logger; + } + + [HttpGet(Name = "GetCompletion")] + public IEnumerable Get() { + return Enumerable.Range(1, 5).Select(index => new CompletionDTO()).ToArray(); + } +} diff --git a/Server/Dockerfile b/Server/Dockerfile new file mode 100644 index 0000000..bd42c23 --- /dev/null +++ b/Server/Dockerfile @@ -0,0 +1,15 @@ +FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build-env +WORKDIR /App + +# stops restore during build +COPY Server.csproj ./ +RUN dotnet restore + +COPY . ./ +RUN dotnet publish -c Release -o out + +# Build runtime image +FROM mcr.microsoft.com/dotnet/aspnet:7.0 +WORKDIR /App +COPY --from=build-env /App/out . +ENTRYPOINT ["dotnet", "DotNet.Docker.dll"] diff --git a/Server/Models/Completion.cs b/Server/Models/Completion.cs new file mode 100644 index 0000000..2dfe597 --- /dev/null +++ b/Server/Models/Completion.cs @@ -0,0 +1,9 @@ +namespace Server.Models; + +public class CompletionDTO { + public DateTimeOffset Date { get; set; } + public Guid Id { get; set; } + public Guid UserId { get; set; } + public string Map { get; set; } + public double Time { get; set; } +} diff --git a/Server/Program.cs b/Server/Program.cs new file mode 100644 index 0000000..77c889c --- /dev/null +++ b/Server/Program.cs @@ -0,0 +1,21 @@ +using Microsoft.EntityFrameworkCore; + +using Server; + +var builder = WebApplication.CreateBuilder(args); + +builder.Services.AddControllers(); +builder.Services.AddDbContextPool(options => { + options.UseNpgsql( + builder.Configuration.GetConnectionString("SpaceRace"), + assembly => assembly.MigrationsAssembly(typeof(SpaceRaceDbContext).Assembly.FullName) + ); +}); + +var app = builder.Build(); + +app.UseHttpsRedirection(); +app.UseAuthorization(); +app.MapControllers(); + +app.Run(); diff --git a/Server/Properties/launchSettings.json b/Server/Properties/launchSettings.json new file mode 100644 index 0000000..5c40582 --- /dev/null +++ b/Server/Properties/launchSettings.json @@ -0,0 +1,41 @@ +{ + "$schema": "https://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:58932", + "sslPort": 44337 + } + }, + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "launchUrl": "swagger", + "applicationUrl": "http://localhost:5212", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "launchUrl": "swagger", + "applicationUrl": "https://localhost:7246;http://localhost:5212", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "launchUrl": "swagger", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/Server/Repositories/SpaceRaceDbContext.cs b/Server/Repositories/SpaceRaceDbContext.cs new file mode 100644 index 0000000..adf29bc --- /dev/null +++ b/Server/Repositories/SpaceRaceDbContext.cs @@ -0,0 +1,16 @@ +using Microsoft.EntityFrameworkCore; + +namespace Server; + +public class SpaceRaceDbContext : DbContext { + public DbSet Completions { get; set; } + public SpaceRaceDbContext(DbContextOptions options) : base(options) {} +} + +public class Completion { + public DateTimeOffset Date { get; set; } + public Guid Id { get; set; } + public Guid UserId { get; set; } + public string Map { get; set; } + public double Time { get; set; } +} diff --git a/Server/appsettings.Development.json b/Server/appsettings.Development.json new file mode 100644 index 0000000..dc27707 --- /dev/null +++ b/Server/appsettings.Development.json @@ -0,0 +1,11 @@ +{ + "ConnectionStrings": { + "SpaceRace": "Server=pg;Port=5432;Database=spacerace;User Id=spacerace;Password=zoomzoom", + }, + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/Server/appsettings.json b/Server/appsettings.json new file mode 100644 index 0000000..10f68b8 --- /dev/null +++ b/Server/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/Server/docker-compose.yaml b/Server/docker-compose.yaml new file mode 100644 index 0000000..b95cc19 --- /dev/null +++ b/Server/docker-compose.yaml @@ -0,0 +1,18 @@ +services: + pg: + image: postgres:latest + environment: + POSTGRES_USER: '${POSTGRES_USER}' + POSTGRES_DB: '${POSTGRES_DB}' + POSTGRES_PASSWORD: '${POSTGRES_PASSWORD}' + ports: + - '45432:5432' + volumes: + - "./db:/var/lib/postgresql/data" + + server: + environment: + CONNECTIONSTRINGS__SPACERACE: "Server=pg;Port=5432;Database=${POSTGRES_DB};User Id=${POSTGRES_USER};Password=${POSTGRES_PASSWORD}" + build: + context: . + dockerfile: ./Dockerfile diff --git a/TODO.md b/TODO.md index 055b6db..c5c489c 100644 --- a/TODO.md +++ b/TODO.md @@ -1,7 +1,6 @@ # SpaceRace! - controls UI - - output boost indicators - controls diagram