public ActionResult RunAction(string receivedData) { MobileAppServerClient.RequestBody rb = JsonConvert.DeserializeObject <MobileAppServerClient.RequestBody>(receivedData); SubServer targetServer = GetAvailableSubServer(); string cacheResultKey = BuildCacheResultKey(rb); if (targetServer == null) { CheckAllocateNewInstance(); return(ResolveResultOnUreachableServer(cacheResultKey)); } Client client = BuildClient(targetServer); client.SendRequest(rb); MobileAppServerClient.OperationResult result = client.GetResult(); if (EnabledCachedResultsForUnreachableServers) { CacheRepository <MobileAppServerClient.OperationResult> .Set(cacheResultKey, result, 380); } if (targetServer.HasLifetime()) { targetServer.RefreshLifetime(); } return(ActionResult.Json(result)); }
private string BuildCacheResultKey(MobileAppServerClient.RequestBody rb) { string cacheResultKey = $"{rb.Controller}-{rb.Action}"; if (rb.Parameters != null) { rb.Parameters.ForEach(p => cacheResultKey += $"-{p.Name}:{p.Value}"); } return(cacheResultKey); }
private int GetCurrentThreadCountOnServer(SubServer server, Client client) { LogController.WriteLog($"Querying availability on '{server.Address}:{server.Port}'", ServerLogType.INFO); MobileAppServerClient.RequestBody rb = MobileAppServerClient .RequestBody.Create("ServerInfoController", "GetCurrentThreadsCount"); client.SendRequest(rb); int result = int.Parse(client.ReadResponse().Content.ToString()); return(result); }