public async Task <IActionResult> Join([FromBody] JoinGameSessionRequest request) { _logger.LogInformation("Received request to create player {PlayerName} and join game with code {JoinCode}", request.PlayerName, request.JoinCode); var joinGameResponse = await _gameSessionService.JoinNewPlayerToGameAsync(request.PlayerName, request.JoinCode); return(Ok(joinGameResponse)); }
public bool?JoinGameSession(JoinGameSessionRequest joinGameRequest, out JoinGameResponse[] responses) { responses = null; if (!this.waitingGameSessionsById.ContainsKey(joinGameRequest.GameId)) { return(null); } var gameDetails = this.waitingGameSessionsById[joinGameRequest.GameId]; if (gameDetails.NumberOfSlots == 0 || gameDetails.Status != GameStatus.Open) { responses = new[] { new JoinGameResponse(gameDetails.Status) }; return(false); } gameDetails.Players.Add(new PlayerDetails { ConnectionId = joinGameRequest.ConnectionId, UserName = joinGameRequest.UserName }); if (gameDetails.NumberOfSlots == 0) { gameDetails.Status = GameStatus.Starting; this.waitingGameSessionsById.TryRemove(gameDetails.Id, out var gd); this.startingGamesById.TryAdd(gameDetails.Id, gameDetails); this.startingGames.Enqueue(gameDetails); gameDetails.LaunchTime = DateTime.Now; } responses = new LaunchGameResponse[gameDetails.NumberOfPlayers]; for (var index = 0; index < gameDetails.Players.Count; index++) { var playerDetails = gameDetails.Players[index]; responses[index] = new LaunchGameResponse( gameDetails.Status, gameDetails.Id, playerDetails.Id, playerDetails.ConnectionId); } return(true); }