public async Task ToggleStateForClients(Predicate <Client> predicate) { foreach (var client in ConnectedClients.Where(predicate.Invoke)) { if (client.TestState.State != UserTestState.UserState.OnHold && client.TestState.State != UserTestState.UserState.Testing) { continue; } if (client.TestState.State == UserTestState.UserState.Testing) { await clientsManager.SendControlMessageToClient(GetJson(new { Action = "Pause" }), client); client.TestState.State = UserTestState.UserState.OnHold; } else if (client.TestState.State == UserTestState.UserState.OnHold) { await clientsManager.SendControlMessageToClient(GetJson(new { Action = "Resume" }), client); client.TestState.State = UserTestState.UserState.Testing; } ClientStatusUpdated?.Invoke(client); } }
private string ClientsManagerOnReceivedMessageFromClient(Client c, JObject message) { if (message["Action"].ToString() == "GetTestInfo") { return(JsonConvert.SerializeObject(new { Status = "OK", Test = currentTest as Test })); } if (message["Action"].ToString() == "GetTestDocs") { if (currentTest.State == Test.TestState.NotStarted) { return(JsonConvert.SerializeObject(new { Status = "ERROR", Code = "TSTNSTART", Message = "Test is not started, cannot get docs" })); } c.TestState.State = UserTestState.UserState.DownloadingDocs; if (string.IsNullOrEmpty(currentTest.DocumentationDirectory)) { return(JsonConvert.SerializeObject(new { Status = "OK", FileType = "nodata", Size = 0 })); } clientsManager.SendBytes(c, DocumentationZip).Wait(); return(JsonConvert.SerializeObject(new { Status = "OK" })); } if (message["Action"].ToString() == "StateUpdate") { c.TestState = JsonConvert.DeserializeObject <UserTestState>(message["State"].ToString()); } if (message["Action"].ToString() == "TestHandover") { c.TestState.State = UserTestState.UserState.Finishing; string response = GetUserTest(c); c.TestState.State = UserTestState.UserState.Testing; return(response); } ClientStatusUpdated?.Invoke(c); return(null); }