From d51df88fec3d3523ee1e872156ebbc62b94095cf Mon Sep 17 00:00:00 2001 From: DTieman Date: Fri, 19 Apr 2024 23:05:56 +0200 Subject: [PATCH] Garbage collection setup that might be needed later --- MauMau-Server.csproj | 2 ++ Program.cs | 13 +++++++++++++ Room/Room.cs | 2 +- Room/RoomManager.cs | 11 +++++++++++ 4 files changed, 27 insertions(+), 1 deletion(-) diff --git a/MauMau-Server.csproj b/MauMau-Server.csproj index 476e59d..d1cec05 100644 --- a/MauMau-Server.csproj +++ b/MauMau-Server.csproj @@ -7,6 +7,8 @@ + + diff --git a/Program.cs b/Program.cs index fe48a95..057d2f3 100644 --- a/Program.cs +++ b/Program.cs @@ -1,3 +1,5 @@ +using Hangfire; +using Hangfire.MemoryStorage; using MauMau_Server.Websockets; var builder = WebApplication.CreateBuilder(args); @@ -9,6 +11,14 @@ services.AddControllers(); services.AddEndpointsApiExplorer(); services.AddSwaggerGen(); services.AddScoped(); +// var roomManager = services.BuildServiceProvider().GetRequiredService(); +// +// services.AddHangfire((sp, config) => +// { +// config.UseRecommendedSerializerSettings(); +// config.UseMemoryStorage(); +// }); +// services.AddHangfireServer(); var app = builder.Build(); @@ -26,6 +36,9 @@ var webSocketOptions = new WebSocketOptions() app.UseWebSockets(webSocketOptions); +// var recurringJobManager = app.Services.GetRequiredService(); +// recurringJobManager.AddOrUpdate("1", () => roomManager.ClearGhostRooms(), Cron.Hourly); + app.UseCors(policyBuilder => { policyBuilder.AllowAnyOrigin(); diff --git a/Room/Room.cs b/Room/Room.cs index b89e655..9081ff4 100644 --- a/Room/Room.cs +++ b/Room/Room.cs @@ -99,7 +99,7 @@ public class Room return _connections.Select(connection => connection.Socket).ToList(); } - private bool IsEmpty() + public bool IsEmpty() { return _connections.Count == 0; } diff --git a/Room/RoomManager.cs b/Room/RoomManager.cs index 2280be2..4b9dab2 100644 --- a/Room/RoomManager.cs +++ b/Room/RoomManager.cs @@ -31,6 +31,16 @@ public class RoomManager : IRoomManager { return Rooms.ContainsKey(roomId); } + + public void ClearGhostRooms() + { + var ghostRooms = Rooms.Where(room => room.Value.IsEmpty()); + foreach (var room in ghostRooms) + { + GC.Collect(GC.GetGeneration(room.Value)); + RemoveRoom(room.Key); + } + } } public interface IRoomManager @@ -40,4 +50,5 @@ public interface IRoomManager public List GetAllRooms(); public void RemoveRoom(string roomId); public bool RoomExists(string roomId); + public void ClearGhostRooms(); } \ No newline at end of file