Ejemplo n.º 1
0
        //   [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));
            }
        }
Ejemplo n.º 2
0
 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);
 }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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));
        }