public void Excecute(ClientObject client, ServerObject server, RoomObject room, string packet = "") { room.Game.StopAnswerTimer(); Console.WriteLine("Check answer"); var request = JsonConvert.DeserializeObject <CheckAnswerRequest>(packet); var response = new CheckAnswerResponse(); response.Status = DB.CheckAnswer(request.Question); Console.WriteLine($"Answer status: {response.Status }"); int points = 0; if (response.Status == ResponseStatus.Ok) { points = request.Question.Points; room.Selector = client; //очищаем клиентов ответивших не верно room.Game.RemoveQuestionFromTable(request.Question.Id); room.Respondents.Clear(); NotifyPlayersAboutUpdateRoom(client, room, UpdateRoomType.UpdateTable); room.Game.StopAnswerButtonClickTimer(); } else { points = request.Question.Points * -1; room.Game.listClickButton.Add(client); room.Respondents.Add(client); //если все ответили не верно, назначаем селектором первого игрока if (room.Clients.Count == room.Respondents.Count) { room.Game.RemoveQuestionFromTable(request.Question.Id); if (room.Clients.Count != 0) { room.Selector = room.Clients.First(); } room.Respondents.Clear(); NotifyPlayersAboutUpdateRoom(client, room, UpdateRoomType.UpdateTable); room.Game.StopAnswerButtonClickTimer(); } else { room.Game.StartAnswerButtonClickTimer(); } if (room.Respondents.Count != 0) { //обновляем статус кнопки ответа для всех игроков ChangeAnswerButtonPropertyForPlayers(room); } } client.UpdatePoints(points); string packetResponse = JsonConvert.SerializeObject(response); room.SendMessageToDefiniteClient(packetResponse, client); //отправляем уведомление об обновлении счета игрока NotifyPlayersAboutUpdateRoom(client, room, UpdateRoomType.UpdatePlayers); }
public override void Execute(string packet) { CheckAnswerResponse checkAnswerResponse = JsonConvert.DeserializeObject <CheckAnswerResponse>(packet); // (ClientObject.view as GameViewModel).UpdatePoints(checkAnswerResponse.Player); GameViewModel gvm = (ClientObject.view as GameViewModel); switch (checkAnswerResponse.Status) { case ResponseStatus.Ok: //gvm.BlockAnswerButton(true); //(ClientObject.view as GameViewModel).UpdatePoints(checkAnswerResponse.Player); //(ClientObject.view as GameViewModel).Status = "Был введён неверный пароль"; break; case ResponseStatus.Bad: // (ClientObject.view as GameViewModel).Status = "Пользователь с таким логином уже играет"; break; } }
public IActionResult CheckAnswer([FromBody] string answer) { var now = DateTime.Now; var sessionCookieData = Request.Cookies.Get <SessionCookieData>(Strings.SessionDataCookieName, _dataProtectionProvider); if (sessionCookieData == null) { return(BadRequest(new CheckAnswerResponse(13, "No session cookie found."))); } var game = _gameRepository.GetById(sessionCookieData.GameId); var lastResponseCheck = sessionCookieData.LastResponseCheck; sessionCookieData.LastResponseCheck = now; // Check rate limit, wait 5 seconds before rechecking if (now - lastResponseCheck < TimeSpan.FromSeconds(5)) { Response.Cookies.Set(Strings.SessionDataCookieName, sessionCookieData, _dataProtectionProvider); return(BadRequest(new ErrorResponse(144, "Exceeding check rate limit."))); } if (game == null) { Response.Cookies.Set(Strings.SessionDataCookieName, sessionCookieData, _dataProtectionProvider); return(BadRequest(new ErrorResponse(39, "Unknown game id."))); } var gameSession = _gameSessionRepository.GetById(sessionCookieData.Id); if (gameSession.State == GameState.Passed || gameSession.State == GameState.Stopped) { return(BadRequest(new ErrorResponse(3, "Already passed or stopped this game session."))); } gameSession.Responses.Add(now, answer); var response = new CheckAnswerResponse(2, $"Incorrect, penalty time ({game.PenaltySeconds}s) applied."); if (game.CheckResponse(answer)) { response.Code = 42; response.Message = "Correct"; gameSession.FinishTime = now; gameSession.State = GameState.Passed; sessionCookieData.GameState = GameState.Passed; } else { sessionCookieData.TotalPenaltySeconds += game.PenaltySeconds; gameSession.TotalPenaltySeconds = sessionCookieData.TotalPenaltySeconds; } _gameSessionRepository.Update(gameSession); response.TotalPenaltySecondsApplied = sessionCookieData.TotalPenaltySeconds; response.RemainingSeconds = game.GetRemainingSeconds(sessionCookieData.StartTime, now, sessionCookieData.TotalPenaltySeconds); Response.Cookies.Set(Strings.SessionDataCookieName, sessionCookieData, _dataProtectionProvider); return(Ok(response)); }