예제 #1
0
        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);
            }
        }
예제 #2
0
        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);
        }