From 3b172467647b1c435b82fb9f9202fb1c234d8195 Mon Sep 17 00:00:00 2001 From: Derek S <44935661+Derek-R-S@users.noreply.github.com> Date: Fri, 9 Apr 2021 02:45:08 -0500 Subject: [PATCH] Added regions to joining load balancer --- .../LRM_LoadBalancer/Endpoint/Endpoint.cs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) 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 4337a52..7d67f91 100644 --- a/LoadBalancerProject-DONT-IMPORT-INTO-UNITY/LRM_LoadBalancer/Endpoint/Endpoint.cs +++ b/LoadBalancerProject-DONT-IMPORT-INTO-UNITY/LRM_LoadBalancer/Endpoint/Endpoint.cs @@ -107,6 +107,11 @@ namespace LightReflectiveMirror.LoadBalancing // collection being modified while iterating. var servers = Program.instance.availableRelayServers.ToList(); var low = lowest; + var lowestTotal = lowest; + var region = context.Request.Headers["x-Region"]; + + // If we cant parse it (due to not being included or not being valid) then just join any region. + int regionID = int.TryParse(region, out regionID) ? regionID : 0; if (servers.Count == 0) { @@ -114,14 +119,25 @@ namespace LightReflectiveMirror.LoadBalancing return; } + bool foundServerInRegion = false; for (int i = 0; i < servers.Count; i++) { if (servers[i].Value.connectedClients < low.Value.connectedClients) { - low = servers[i]; + if ((int)servers[i].Key.serverRegion == regionID) + { + low = servers[i]; + foundServerInRegion = true; + } + + lowestTotal = servers[i]; } } + // If the region didnt have a single node, then just give him the lowest node we looped over. + if (!foundServerInRegion) + low = lowestTotal; + // respond with the server ip // if the string is still dummy then theres no servers await context.Response.SendResponseAsync(low.Key.address != "Dummy" ? JsonConvert.SerializeObject(low.Key) : HttpStatusCode.InternalServerError);