Dotnet version upgrade
Some checks failed
Build Mau & Deploy Mau / build (push) Failing after 1m2s
Build Mau & Deploy Mau / deploy (push) Has been skipped

This commit is contained in:
2024-07-13 00:01:43 +02:00
parent 25b7a8fb1e
commit 681cfa13bd
15 changed files with 173 additions and 142 deletions

View File

@@ -1,4 +1,26 @@
.idea/ **/.dockerignore
.git/ **/.env
.gitignore **/.git
**/.gitea
**/.gitignore
**/.project
**/.settings
**/.toolstarget
**/.vs
**/.vscode
**/.idea
**/*.*proj.user
**/*.dbmdl
**/*.jfm
**/azds.yaml
**/bin
**/charts
**/docker-compose*
**/Dockerfile*
**/node_modules
**/npm-debug.log
**/obj
**/secrets.dev.yaml
**/values.dev.yaml
LICENSE
README.md README.md

13
.gitignore vendored
View File

@@ -1,8 +1,7 @@
bin/
obj/
/packages/
riderModule.iml
/_ReSharper.Caches/
.idea .idea
bin
obj
Properties
appsettings.Local.json
.git
*.DotSettings.user
*.sln

View File

@@ -1,35 +1,23 @@
FROM mcr.microsoft.com/dotnet/runtime-deps:7.0-alpine AS base FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
USER $APP_UID
WORKDIR /app WORKDIR /app
EXPOSE 5000 EXPOSE 8080
EXPOSE 8081
FROM --platform=$BUILDPLATFORM mcr.microsoft.com/dotnet/sdk:7.0-alpine AS build
ARG TARGETARCH
ARG BUILDPLATFORM
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src WORKDIR /src
COPY *.csproj . COPY ["MauMau-Server/MauMau-Server.csproj", "MauMau-Server/"]
RUN dotnet restore "MauMau-Server.csproj" RUN dotnet restore "MauMau-Server/MauMau-Server.csproj"
COPY . . COPY . .
WORKDIR "/src" WORKDIR "/src/MauMau-Server"
RUN dotnet build "MauMau-Server.csproj" -c Release -o /app/build -a $TARGETARCH RUN dotnet build "MauMau-Server.csproj" -c $BUILD_CONFIGURATION -o /app/build
FROM build AS publish FROM build AS publish
RUN dotnet publish "MauMau-Server.csproj" -c Release -o /app/publish \ ARG BUILD_CONFIGURATION=Release
--self-contained true \ RUN dotnet publish "MauMau-Server.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false
/p:PublishTrimmed=true \
/p:PublishSingleFile=true \
-a $TARGETARCH
FROM --platform=$BUILDPLATFORM base AS final FROM base AS final
ARG TARGETARCH
ARG BUILDPLATFORM
RUN adduser --disabled-password \
--home /app \
--gecos '' dotnetuser && chown -R dotnetuser /app
USER dotnetuser
WORKDIR /app WORKDIR /app
COPY --from=publish /app/publish . COPY --from=publish /app/publish .
ENTRYPOINT ["./MauMau-Server"] ENTRYPOINT ["dotnet", "MauMau-Server.dll"]

View File

@@ -1,9 +1,9 @@
using MauMau_Server.Mau.GameMessages; using System.Text.Json;
using MauMau_Server.Mau.GameMessages;
using MauMau_Server.Mau.Managers; using MauMau_Server.Mau.Managers;
using MauMau_Server.Websockets; using MauMau_Server.Websockets;
using MauMau_Server.Room; using MauMau_Server.Room;
using MauMau_Server.Room.Messages; using MauMau_Server.Room.Messages;
using Newtonsoft.Json;
namespace MauMau_Server.Mau; namespace MauMau_Server.Mau;
@@ -142,6 +142,8 @@ public class Game : RoomType
*/ */
private void Choose(Player player, string data) private void Choose(Player player, string data)
{ {
// TODO: Validate if choosing a card is allowed
// Convert the data to a CardType, if it fails, ignore the message // Convert the data to a CardType, if it fails, ignore the message
if (!Enum.TryParse(data, out CardType cardType)) if (!Enum.TryParse(data, out CardType cardType))
{ {
@@ -168,7 +170,6 @@ public class Game : RoomType
* When there are multiple mau cards played, the player has to draw the combined amount of mau cards played. * When there are multiple mau cards played, the player has to draw the combined amount of mau cards played.
* </summary> * </summary>
* <param name="player">The player that drew a card</param> * <param name="player">The player that drew a card</param>
* <param name="data">A string that can be serialized to a drawcard instance</param>
*/ */
private void Draw(Player player) private void Draw(Player player)
{ {
@@ -228,7 +229,7 @@ public class Game : RoomType
} }
// Convert the data to a Card instance // Convert the data to a Card instance
var cardData = JsonConvert.DeserializeObject<PlayCard>(data).ToCard(); var cardData = JsonSerializer.Deserialize<PlayCard>(data).ToCard();
// Check if the player indeed has the card they claim to have // Check if the player indeed has the card they claim to have
var playerCard = player.TakeCardFromHand(cardData); var playerCard = player.TakeCardFromHand(cardData);
@@ -304,6 +305,7 @@ public class Game : RoomType
_turnManager.ChangeDirection(); _turnManager.ChangeDirection();
_turnManager.ChangeTurnTo(); _turnManager.ChangeTurnTo();
} }
break; break;
case CardValue.JACK: case CardValue.JACK:
_turnManager.CurrentPlayer.State = PlayerState.CHOOSE; _turnManager.CurrentPlayer.State = PlayerState.CHOOSE;
@@ -345,7 +347,8 @@ public class Game : RoomType
if (NextAllowedCardType != null) if (NextAllowedCardType != null)
{ {
// If so, the card must be the allowed card type, a joker or the same value as the current card // If so, the card must be the allowed card type, a joker or the same value as the current card
return card.CardType == NextAllowedCardType || card.CardType == CardType.JOKER || card.CardValue == _deck.CurrentCard.CardValue; return card.CardType == NextAllowedCardType || card.CardType == CardType.JOKER ||
card.CardValue == _deck.CurrentCard.CardValue;
} }
// Otherwise, use the normal rules // Otherwise, use the normal rules
@@ -366,15 +369,13 @@ public class Game : RoomType
if (card.CardType == CardType.JOKER) if (card.CardType == CardType.JOKER)
{ {
totalCards += 5; totalCards += 5;
continue;
} }
else if (card.CardValue == CardValue.TWO)
if (card.CardValue == CardValue.TWO)
{ {
totalCards += 2; totalCards += 2;
continue;
} }
} }
_mauCardBuffer.Clear(); _mauCardBuffer.Clear();
return totalCards; return totalCards;
} }
@@ -389,8 +390,10 @@ public class Game : RoomType
{ {
foreach (var player in _turnManager.Players) foreach (var player in _turnManager.Players)
{ {
var gameState = new GameState(player, _deck.CurrentCard, NextAllowedCardType, _turnManager.CurrentPlayer, _turnManager.Players); var gameState = new GameState(player, _deck.CurrentCard, NextAllowedCardType, _turnManager.CurrentPlayer,
player.Connection.SendMessageAsync(JsonConvert.SerializeObject(new RoomMessage<GameState>("GAME", gameState))); _turnManager.Players);
player.Connection.SendMessageAsync(
JsonSerializer.Serialize(new RoomMessage<GameState>("GAME", gameState)));
} }
} }
@@ -402,7 +405,7 @@ public class Game : RoomType
*/ */
private void EndGame(Player winner) private void EndGame(Player winner)
{ {
var winMessage = new EndMessage(winner.Connection.Id, winner.Connection.Name); var winMessage = new EndMessage(winner.Connection);
_room.BroadCast(new RoomMessage<EndMessage>("END", winMessage)); _room.BroadCast(new RoomMessage<EndMessage>("END", winMessage));
_room.RoomType = new Lobby(_room); _room.RoomType = new Lobby(_room);
} }

View File

@@ -1,16 +1,16 @@
<Project Sdk="Microsoft.NET.Sdk.Web"> <Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup> <PropertyGroup>
<TargetFramework>net7.0</TargetFramework> <TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<RootNamespace>MauMau_Server2</RootNamespace>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Hangfire.Core" Version="1.8.12" /> <PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="8.0.6"/>
<PackageReference Include="Hangfire.MemoryStorage" Version="1.8.0" />
<PackageReference Include="Microsoft.AspNet.SignalR" Version="2.4.3" />
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="7.0.3" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0"/> <PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0"/>
</ItemGroup> </ItemGroup>
</Project> </Project>

16
MauMau-Server.sln Normal file
View File

@@ -0,0 +1,16 @@
Microsoft Visual Studio Solution File, Format Version 12.00
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MauMau-Server", "MauMau-Server.csproj", "{44311559-F848-4D9B-9DB6-372042C8E6DA}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{44311559-F848-4D9B-9DB6-372042C8E6DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{44311559-F848-4D9B-9DB6-372042C8E6DA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{44311559-F848-4D9B-9DB6-372042C8E6DA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{44311559-F848-4D9B-9DB6-372042C8E6DA}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal

View File

@@ -1,25 +1,13 @@
using Hangfire;
using Hangfire.MemoryStorage;
using MauMau_Server.Room; using MauMau_Server.Room;
using MauMau_Server.Websockets;
var builder = WebApplication.CreateBuilder(args); var builder = WebApplication.CreateBuilder(args);
// Add services to the container. // Add services to the container.
var services = builder.Services; builder.Services.AddControllers();
services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
services.AddEndpointsApiExplorer(); builder.Services.AddEndpointsApiExplorer();
services.AddSwaggerGen(); builder.Services.AddSwaggerGen();
services.AddScoped<IRoomManager, RoomManager>(); builder.Services.AddScoped<IRoomManager, RoomManager>();
// var roomManager = services.BuildServiceProvider().GetRequiredService<IRoomManager>();
//
// services.AddHangfire((sp, config) =>
// {
// config.UseRecommendedSerializerSettings();
// config.UseMemoryStorage();
// });
// services.AddHangfireServer();
var app = builder.Build(); var app = builder.Build();
@@ -37,9 +25,6 @@ var webSocketOptions = new WebSocketOptions()
app.UseWebSockets(webSocketOptions); app.UseWebSockets(webSocketOptions);
// var recurringJobManager = app.Services.GetRequiredService<IRecurringJobManagerV2>();
// recurringJobManager.AddOrUpdate("1", () => roomManager.ClearGhostRooms(), Cron.Hourly);
app.UseCors(policyBuilder => app.UseCors(policyBuilder =>
{ {
policyBuilder.AllowAnyOrigin(); policyBuilder.AllowAnyOrigin();
@@ -48,6 +33,5 @@ app.UseCors(policyBuilder =>
}); });
app.UseHttpsRedirection(); app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers(); app.MapControllers();
app.Run(); app.Run();

View File

@@ -0,0 +1,41 @@
{
"$schema": "http://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:65148",
"sslPort": 44331
}
},
"profiles": {
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"launchUrl": "swagger",
"applicationUrl": "http://localhost:5039",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"https": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"launchUrl": "swagger",
"applicationUrl": "https://localhost:7037;http://localhost:5039",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"launchUrl": "swagger",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}

View File

@@ -1 +0,0 @@
Mau

View File

@@ -2,6 +2,7 @@
public class ChatMessage public class ChatMessage
{ {
public Guid Id { get; set; } = Guid.NewGuid();
public string Sender { get; set; } public string Sender { get; set; }
public string Message { get; set; } public string Message { get; set; }

View File

@@ -1,13 +1,13 @@
namespace MauMau_Server.Room.Messages; using MauMau_Server.Websockets;
namespace MauMau_Server.Room.Messages;
public class EndMessage public class EndMessage
{ {
public Guid WinnerId { get; set; } public ConnectionInstance Winner { get; set; }
public string WinnerName { get; set; }
public EndMessage(Guid winnerId, string winnerName) public EndMessage(ConnectionInstance winner)
{ {
WinnerId = winnerId; Winner = winner;
WinnerName = winnerName;
} }
} }

View File

@@ -3,7 +3,6 @@ using System.Text.Json;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using MauMau_Server.Room.Messages; using MauMau_Server.Room.Messages;
using MauMau_Server.Websockets; using MauMau_Server.Websockets;
using Microsoft.AspNet.SignalR.Messaging;
namespace MauMau_Server.Room; namespace MauMau_Server.Room;
@@ -11,7 +10,7 @@ public class Room
{ {
private readonly IRoomManager _roomManager; private readonly IRoomManager _roomManager;
private readonly string _roomId; private readonly string _roomId;
public readonly List<ConnectionInstance> Connections = new(); public readonly List<ConnectionInstance> Connections = [];
public ConnectionInstance? Host; public ConnectionInstance? Host;
public RoomType RoomType; public RoomType RoomType;

View File

@@ -1,4 +1,4 @@
using Newtonsoft.Json; using System.Text.Json;
namespace MauMau_Server.Room; namespace MauMau_Server.Room;
@@ -10,7 +10,7 @@ public class RoomMessage<T>
public RoomMessage(string type, T data) public RoomMessage(string type, T data)
{ {
Type = type; Type = type;
Data = JsonConvert.SerializeObject(data); Data = JsonSerializer.Serialize(data);
} }
public RoomMessage() public RoomMessage()

View File

@@ -1,22 +1,16 @@
using System.Net.WebSockets; using System.Net.WebSockets;
using System.Text; using System.Text;
using Newtonsoft.Json; using System.Text.Json.Serialization;
namespace MauMau_Server.Websockets; namespace MauMau_Server.Websockets;
public class ConnectionInstance public class ConnectionInstance(string name, Guid id, WebSocket socket)
{ {
public Guid Id { get; set; } public Guid Id { get; set; } = id;
public string Name { get; set; } public string Name { get; set; } = name;
[JsonIgnore]
public WebSocket Socket { get; set; }
public ConnectionInstance(string name, Guid id, WebSocket socket) [JsonIgnore]
{ public WebSocket Socket { get; set; } = socket;
Name = name;
Id = id;
Socket = socket;
}
/** /**
* <summary> * <summary>

View File

@@ -1,15 +0,0 @@
version: '3.9'
services:
server:
build:
context: .
dockerfile: Dockerfile
container_name: 'MauMau-Server'
restart: always
ports:
- "5000:5000"
networks:
- MauMau
networks:
MauMau:
driver: bridge