// [Authorize(Policy = "LobbyManagement")] #endif public IActionResult ConfigureLobby([FromBody] ConfigureLobbyRequest request, [FromQuery(Name = "Id")] string testHookId) { if (!ModelState.IsValid) { return(new BadRequestResult()); } AuthenticatedUser user = GameManager.GetAuthenticatedUser(this.HttpContext.User.GetUserId(testHookId)); if (user == null) { return(StatusCode(500, "Something went wrong finding that user, try again")); } if (user.OwnedLobby == null) { return(StatusCode(404, "Lobby doesn't exist.")); } lock (user.Lock) { if (user.OwnedLobby == null) { return(StatusCode(404, "Lobby doesn't exist.")); } if (!user.OwnedLobby.ConfigureLobby(request, out string error, out ConfigureLobbyResponse response)) { return(StatusCode(400, error)); } return(new OkObjectResult(response)); } }
public async Task Configure(IEnumerable <GameModeOptionRequest> options, StandardGameModeOptions standardOptions, int GameMode) { ConfigureLobbyRequest configLobby = new ConfigureLobbyRequest() { GameMode = GameMode, Options = options.ToList() }; await CommonSubmissions.ConfigureLobby(configLobby, standardOptions, Owner.UserId); }
public bool ConfigureLobby(ConfigureLobbyRequest request, out string errorMsg, out ConfigureLobbyResponse response) { errorMsg = string.Empty; response = null; if (IsGameInProgress()) { // TODO: this might need updating for replay logic. errorMsg = "Cannot change configuration lobby while game is in progress!"; return(false); } if (request?.GameMode == null || request.GameMode.Value < 0 || request.GameMode.Value >= GameModes.Count) { errorMsg = "Unsupported Game Mode"; return(false); } // Don't check player minimum count when configuring, but do check on start. if (!GameModes[request.GameMode.Value].GameModeMetadata.IsSupportedPlayerCount(GetAllUsers().Count, ignoreMinimum: true)) { errorMsg = Invariant($"Selected game mode has following restrictions: {GameModes[request.GameMode.Value].GameModeMetadata.RestrictionsToString()}"); return(false); } IReadOnlyList <GameModeOptionResponse> requiredOptions = GameModes[request.GameMode.Value].GameModeMetadata.Options; if (request?.Options == null || request.Options.Count != requiredOptions.Count) { errorMsg = "Wrong number of options provided for selected game mode."; return(false); } for (int i = 0; i < requiredOptions.Count; i++) { if (!request.Options[i].ParseValue(requiredOptions[i], out errorMsg)) { return(false); } } this.SelectedGameMode = GameModes[request.GameMode.Value]; int numUsers = this.GetAllUsers().Count; response = new ConfigureLobbyResponse() { LobbyId = LobbyId, PlayerCount = numUsers, GameDurationEstimatesInMinutes = SelectedGameMode.GameModeMetadata.GetGameDurationEstimates(numUsers, request.Options).ToDictionary(kvp => kvp.Key, kvp => (int)kvp.Value.TotalMinutes), }; this.GameModeOptions = request.Options; this.ConfigMetaData.GameMode = this.SelectedGameMode.GameModeMetadata.GameId; return(true); }
public static async Task ConfigureLobby(ConfigureLobbyRequest request, StandardGameModeOptions standardOptions, string userId) { await WebClient.MakeWebRequest( path : Constants.Path.LobbyConfigure, userId : userId, method : HttpMethod.Post, content : new StringContent( JsonConvert.SerializeObject(request), Encoding.UTF8, Constants.MediaType.ApplicationJson)); await WebClient.MakeWebRequest( path : Constants.Path.LobbyStart, userId : userId, method : HttpMethod.Post, content : new StringContent( JsonConvert.SerializeObject(standardOptions), Encoding.UTF8, Constants.MediaType.ApplicationJson)); }