Runtime/Core/ApiGatewayManagement/LocalGameAdapter.cs (89 lines of code) (raw):

// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 using System; using System.Linq; using System.Threading.Tasks; using AmazonGameLiftPlugin.Core.ApiGatewayManagement.Models; using AmazonGameLiftPlugin.Core.Shared; using AmazonGameLiftPlugin.Core.Shared.Logging; namespace AmazonGameLiftPlugin.Core.ApiGatewayManagement { public class LocalGameAdapter : IGameServerAdapter { private readonly IAmazonGameLiftWrapper _amazonGameLiftWrapper; private readonly string _fleetId = "fleet-123"; private readonly string _playerIdPrefix = "playerId-"; public LocalGameAdapter(IAmazonGameLiftWrapper amazonGameLiftWrapper) { _amazonGameLiftWrapper = amazonGameLiftWrapper; } public async Task<GetGameConnectionResponse> GetGameConnection(GetGameConnectionRequest request) { try { Amazon.GameLift.Model.DescribeGameSessionsResponse describeGameSessionsResponse = await _amazonGameLiftWrapper.DescribeGameSessions(new Amazon.GameLift.Model.DescribeGameSessionsRequest { FleetId = _fleetId, }); if (describeGameSessionsResponse.GameSessions.Any()) { Amazon.GameLift.Model.GameSession oldestGameSession = describeGameSessionsResponse.GameSessions.First(); Amazon.GameLift.Model.CreatePlayerSessionResponse createPlayerSessionResponse = await _amazonGameLiftWrapper.CreatePlayerSession(new Amazon.GameLift.Model.CreatePlayerSessionRequest { GameSessionId = oldestGameSession.GameSessionId, PlayerId = _playerIdPrefix + Guid.NewGuid().ToString() }); Amazon.GameLift.Model.PlayerSession playerSession = createPlayerSessionResponse.PlayerSession; var response = new GetGameConnectionResponse { IpAddress = playerSession.IpAddress, DnsName = playerSession.DnsName, Port = playerSession.Port.ToString(), PlayerSessionId = playerSession.PlayerSessionId, Ready = true }; return Response.Ok(response); } return Response.Fail(new GetGameConnectionResponse { ErrorCode = ErrorCode.NoGameSessionWasFound }); } catch (Exception ex) { Logger.LogError(ex, ex.Message); return Response.Fail(new GetGameConnectionResponse { ErrorCode = ErrorCode.UnknownError, ErrorMessage = ex.Message }); } } public async Task<StartGameResponse> StartGame(StartGameRequest request) { try { Amazon.GameLift.Model.DescribeGameSessionsResponse describeGameSessionsResponse = await _amazonGameLiftWrapper.DescribeGameSessions(new Amazon.GameLift.Model.DescribeGameSessionsRequest { FleetId = _fleetId, }); if (!describeGameSessionsResponse.GameSessions.Any()) { Amazon.GameLift.Model.CreateGameSessionResponse createGameSessionResponse = await _amazonGameLiftWrapper.CreateGameSessionAsync(new Amazon.GameLift.Model.CreateGameSessionRequest { MaximumPlayerSessionCount = 4, FleetId = _fleetId }); } return Response.Ok(new StartGameResponse()); } catch (Exception ex) { Logger.LogError(ex, ex.Message); return Response.Fail(new StartGameResponse { ErrorCode = ErrorCode.UnknownError, ErrorMessage = ex.Message }); } } } }