diff --git a/LoadBalancerProject-DONT-IMPORT-INTO-UNITY/LRM_LoadBalancer/Endpoint/Endpoint.cs b/LoadBalancerProject-DONT-IMPORT-INTO-UNITY/LRM_LoadBalancer/Endpoint/Endpoint.cs index 997aae3..53cac99 100644 --- a/LoadBalancerProject-DONT-IMPORT-INTO-UNITY/LRM_LoadBalancer/Endpoint/Endpoint.cs +++ b/LoadBalancerProject-DONT-IMPORT-INTO-UNITY/LRM_LoadBalancer/Endpoint/Endpoint.cs @@ -18,7 +18,6 @@ namespace LightReflectiveMirror.LoadBalancing [RestResource] public partial class Endpoint { - /// /// Sent from an LRM server node /// adds it to the list if authenticated. @@ -81,30 +80,8 @@ namespace LightReflectiveMirror.LoadBalancing for (int i = 0; i < relays.Count; i++) { requestedRooms = await Program.instance.RequestServerListFromNode(relays[i].Key.address, relays[i].Key.endpointPort); - _allServers.AddRange(requestedRooms); - - switch (relays[i].Key.serverRegion) - { - default: - case LRMRegions.NorthAmerica: - _northAmericaServers.AddRange(requestedRooms); - break; - case LRMRegions.SouthAmerica: - _southAmericaServers.AddRange(requestedRooms); - break; - case LRMRegions.Europe: - _europeServers.AddRange(requestedRooms); - break; - case LRMRegions.Africa: - _africaServers.AddRange(requestedRooms); - break; - case LRMRegions.Asia: - _asiaServers.AddRange(requestedRooms); - break; - case LRMRegions.Oceania: - _oceaniaServers.AddRange(requestedRooms); - break; - } + _regionRooms[LRMRegions.Any].AddRange(requestedRooms); + _regionRooms[relays[i].Key.serverRegion].AddRange(requestedRooms); } CacheAllServers(); @@ -156,36 +133,12 @@ namespace LightReflectiveMirror.LoadBalancing if(int.TryParse(region, out int regionID)) { - switch ((LRMRegions)regionID) - { - case LRMRegions.Any: - await context.Response.SendResponseAsync(allCachedServers); - break; - case LRMRegions.NorthAmerica: - await context.Response.SendResponseAsync(NorthAmericaCachedServers); - break; - case LRMRegions.SouthAmerica: - await context.Response.SendResponseAsync(SouthAmericaCachedServers); - break; - case LRMRegions.Europe: - await context.Response.SendResponseAsync(EuropeCachedServers); - break; - case LRMRegions.Africa: - await context.Response.SendResponseAsync(AfricaCachedServers); - break; - case LRMRegions.Asia: - await context.Response.SendResponseAsync(AsiaCachedServers); - break; - case LRMRegions.Oceania: - await context.Response.SendResponseAsync(OceaniaCachedServers); - break; - } - + await context.Response.SendResponseAsync(_cachedRegionRooms[(LRMRegions)regionID]); return; } // They didnt submit a region header, just give them all servers as they probably are viewing in browser. - await context.Response.SendResponseAsync(allCachedServers); + await context.Response.SendResponseAsync(_cachedRegionRooms[LRMRegions.Any]); } /// @@ -204,6 +157,15 @@ namespace LightReflectiveMirror.LoadBalancing { await context.Response.SendResponseAsync(Program.instance.GenerateServerID()); } + + public static void Initialize() + { + foreach (LRMRegions region in Enum.GetValues(typeof(LRMRegions))) + { + _regionRooms.Add(region, new()); + _cachedRegionRooms.Add(region, "[]"); + } + } } #region Startup @@ -214,6 +176,9 @@ namespace LightReflectiveMirror.LoadBalancing { try { + // Initialize the region variables + Endpoint.Initialize(); + var config = new ConfigurationBuilder() .SetBasePath(System.IO.Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) diff --git a/LoadBalancerProject-DONT-IMPORT-INTO-UNITY/LRM_LoadBalancer/Endpoint/EndpointExtra.cs b/LoadBalancerProject-DONT-IMPORT-INTO-UNITY/LRM_LoadBalancer/Endpoint/EndpointExtra.cs index 51c8d20..7cce8aa 100644 --- a/LoadBalancerProject-DONT-IMPORT-INTO-UNITY/LRM_LoadBalancer/Endpoint/EndpointExtra.cs +++ b/LoadBalancerProject-DONT-IMPORT-INTO-UNITY/LRM_LoadBalancer/Endpoint/EndpointExtra.cs @@ -9,24 +9,14 @@ namespace LightReflectiveMirror.LoadBalancing { static void CacheAllServers() { - allCachedServers = JsonConvert.SerializeObject(_allServers); - NorthAmericaCachedServers = JsonConvert.SerializeObject(_northAmericaServers); - SouthAmericaCachedServers = JsonConvert.SerializeObject(_southAmericaServers); - EuropeCachedServers = JsonConvert.SerializeObject(_europeServers); - AsiaCachedServers = JsonConvert.SerializeObject(_asiaServers); - AfricaCachedServers = JsonConvert.SerializeObject(_africaServers); - OceaniaCachedServers = JsonConvert.SerializeObject(_oceaniaServers); + foreach (var region in _regionRooms) + _cachedRegionRooms[region.Key] = JsonConvert.SerializeObject(region.Value); } static void ClearAllServersLists() { - _northAmericaServers.Clear(); - _southAmericaServers.Clear(); - _europeServers.Clear(); - _asiaServers.Clear(); - _africaServers.Clear(); - _oceaniaServers.Clear(); - _allServers.Clear(); + foreach (var region in _regionRooms) + region.Value.Clear(); } } diff --git a/LoadBalancerProject-DONT-IMPORT-INTO-UNITY/LRM_LoadBalancer/Endpoint/EndpointVariables.cs b/LoadBalancerProject-DONT-IMPORT-INTO-UNITY/LRM_LoadBalancer/Endpoint/EndpointVariables.cs index 00ecdb7..980704e 100644 --- a/LoadBalancerProject-DONT-IMPORT-INTO-UNITY/LRM_LoadBalancer/Endpoint/EndpointVariables.cs +++ b/LoadBalancerProject-DONT-IMPORT-INTO-UNITY/LRM_LoadBalancer/Endpoint/EndpointVariables.cs @@ -11,21 +11,8 @@ namespace LightReflectiveMirror.LoadBalancing private static readonly KeyValuePair lowest = new(new() { address = "Dummy" }, new() { connectedClients = int.MaxValue }); - public static string allCachedServers = "[]"; - public static string NorthAmericaCachedServers = "[]"; - public static string SouthAmericaCachedServers = "[]"; - public static string EuropeCachedServers = "[]"; - public static string AsiaCachedServers = "[]"; - public static string AfricaCachedServers = "[]"; - public static string OceaniaCachedServers = "[]"; - - private static List _northAmericaServers = new(); - private static List _southAmericaServers = new(); - private static List _europeServers = new(); - private static List _africaServers = new(); - private static List _asiaServers = new(); - private static List _oceaniaServers = new(); - private static List _allServers = new(); + private static Dictionary> _regionRooms = new(); + private static Dictionary _cachedRegionRooms = new(); private LoadBalancerStats _stats {