// GET api/GameState/5 public GameState Get(int id) { var gameState = _gameStateRepository.Find(id); if (gameState == null) { throw new HttpResponseException(HttpStatusCode.NotFound); } return(gameState); }
public ApiResponse <IntentResponse> CreateCommands(IntentRequest req) { if (string.IsNullOrEmpty(req.ExpectedVersion)) { return(new ClientError("invalid state version").AsError <IntentResponse>()); } var user = _users.Find(req.Login); if (user == null) { _logger.Warning(this, $"Can't find user with login: '******'"); return(new ServerError().AsError <IntentResponse>()); } var state = _states.Find(user); if (state == null) { _logger.Warning(this, $"Can't find state for user with login: '******'"); return(new ServerError().AsError <IntentResponse>()); } if (state.Version != req.ExpectedVersion) { _logger.Warning(this, $"Current state version don't match expected version: '{state.Version}' != '{req.ExpectedVersion}'"); return(new ConflictError($"Current state version is '{state.Version}'").AsError <IntentResponse>()); } var config = _config.Get(); var command = req.Command; if (!IsValidAsFirstCommand(command)) { return(new ClientError($"Trying to execute internal command: '{command}'").AsError <IntentResponse>()); } var runner = new CommandRunner(_time.RealTime - state.Time.LastSyncTime, command, state, config); foreach (var item in runner) { if ((item.Command is IDebugCommand) && !_env.IsDebugMode) { return(new ClientError($"Invalid debug command: '{item.Command}'").AsError <IntentResponse>()); } if (!item.IsValid()) { return(new ClientError($"Invalid command: '{item.Command}'").AsError <IntentResponse>()); } item.Execute(); } var oldVersion = state.Version; state.UpdateVersion(); state = _states.Save(user, state); _logger.Debug(this, $"State updated: version was '{oldVersion}', changed to '{state.Version}'"); return(new IntentResponse(state.Version).AsResult()); }