/// <summary> /// Unmarshaller the response from the service to the response class. /// </summary> /// <param name="context"></param> /// <returns></returns> public override AmazonWebServiceResponse Unmarshall(JsonUnmarshallerContext context) { SearchGameSessionsResponse response = new SearchGameSessionsResponse(); context.Read(); int targetDepth = context.CurrentDepth; while (context.ReadAtDepth(targetDepth)) { if (context.TestExpression("GameSessions", targetDepth)) { var unmarshaller = new ListUnmarshaller <GameSession, GameSessionUnmarshaller>(GameSessionUnmarshaller.Instance); response.GameSessions = unmarshaller.Unmarshall(context); continue; } if (context.TestExpression("NextToken", targetDepth)) { var unmarshaller = StringUnmarshaller.Instance; response.NextToken = unmarshaller.Unmarshall(context); continue; } } return(response); }
async private Task <GameSession> SearchGameSessionsAsync() { Debug.Log("SearchGameSessions"); var searchGameSessionsRequest = new SearchGameSessionsRequest(); searchGameSessionsRequest.FleetId = FleetId; // can also use AliasId searchGameSessionsRequest.FilterExpression = "hasAvailablePlayerSessions=true"; // only ones we can join searchGameSessionsRequest.SortExpression = "creationTimeMillis ASC"; // return oldest first searchGameSessionsRequest.Limit = 1; // only one session even if there are other valid ones Task <SearchGameSessionsResponse> SearchGameSessionsResponseTask = _amazonGameLiftClient.SearchGameSessionsAsync(searchGameSessionsRequest); SearchGameSessionsResponse searchGameSessionsResponse = await SearchGameSessionsResponseTask; int gameSessionCount = searchGameSessionsResponse.GameSessions.Count; Debug.Log($"GameSessionCount: {gameSessionCount}"); if (gameSessionCount > 0) { Debug.Log("We have game sessions!"); Debug.Log(searchGameSessionsResponse.GameSessions[0].GameSessionId); return(searchGameSessionsResponse.GameSessions[0]); } return(null); }
public override void Invoke(AWSCredentials creds, RegionEndpoint region, int maxItems) { AmazonGameLiftConfig config = new AmazonGameLiftConfig(); config.RegionEndpoint = region; ConfigureClient(config); AmazonGameLiftClient client = new AmazonGameLiftClient(creds, config); SearchGameSessionsResponse resp = new SearchGameSessionsResponse(); do { SearchGameSessionsRequest req = new SearchGameSessionsRequest { NextToken = resp.NextToken , Limit = maxItems }; resp = client.SearchGameSessions(req); CheckError(resp.HttpStatusCode, "200"); foreach (var obj in resp.GameSessions) { AddObject(obj); } }while (!string.IsNullOrEmpty(resp.NextToken)); }
/// <summary> /// GameLift client /// </summary> public void SearchGameSessions() { GD.Print("starting search function"); BasicAWSCredentials credentials = new BasicAWSCredentials("", ""); gameLiftClient = new AmazonGameLiftClient(credentials, Amazon.RegionEndpoint.SAEast1); SearchGameSessionsRequest request = new SearchGameSessionsRequest() { FilterExpression = "hasAvailablePlayerSessions=true", FleetId = PongServer }; try { SearchGameSessionsResponse activeSessions = gameLiftClient.SearchGameSessions(request); List <GameSession> sessions = activeSessions.GameSessions; if (sessions.Count == 0) { CreateSession(); } else { ConnectToSession(sessions[0]); } } catch (Exception e) { GD.Print(e); } }
public void FindGameSession() { Debug.Log("FindGameSessionGameLift"); //Search for active Game sessions: //https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/GameLift/TSearchGameSessionsRequest.html var request = new SearchGameSessionsRequest() { FilterExpression = "hasAvailablePlayerSessions=true", FleetId = staticData.myFleetID, Limit = 20, //FilterExpression = "maximumSessions>=10 AND hasAvailablePlayerSessions=true" // Example filter to limit search results }; SearchGameSessionsResponse gameSessionlist = null; try { Debug.Log("Searching for game sessions"); gameSessionlist = m_Client.SearchGameSessions(request); Debug.Log("Done Searching for game sessions"); } catch (Exception ex) { Handler(ex); } if (gameSessionlist == null) { Debug.Log("Unable to search for Game Sessions... What now?"); //return null; } else { myGameSession = gameSessionlist.GameSessions[0]; Debug.Log(gameSessionlist.GameSessions.Count + " sessions found"); Debug.Log(gameSessionlist.GameSessions[0].CurrentPlayerSessionCount + " / " + gameSessionlist.GameSessions[0].MaximumPlayerSessionCount + " players in game session"); //Debug.Log(gameSessionlist.GameSessions[0]. } //Debug.Log(gameSessionlist.GameSessions[0].Port); //gameSessionlist.GameSessions[0]. //m_Client.CreatePlayerSession() var request2 = new CreatePlayerSessionRequest() { GameSessionId = gameSessionlist.GameSessions[0].GameSessionId, PlayerData = "BoltIsBestNetworking", PlayerId = UniqueID }; // var response2 = m_Client.CreatePlayerSession(request2); CreatePlayerSessionResponse SessionResponse = null; try { Debug.Log("Creating player session"); SessionResponse = m_Client.CreatePlayerSession(request2); Debug.Log("Done Creating player session"); } catch (Exception ex) { Handler(ex); } if (SessionResponse == null) { Debug.Log("Where are my dragons???"); //return null; } return; }
public GameSession FindGameSession() { Debug.Log("FindGameSessionGameLift"); //Search for active Game sessions: //https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/GameLift/TSearchGameSessionsRequest.html var request = new SearchGameSessionsRequest() { FilterExpression = "hasAvailablePlayerSessions=true", FleetId = m_targetFleet, Limit = 20, //FilterExpression = "maximumSessions>=10 AND hasAvailablePlayerSessions=true" // Example filter to limit search results }; SearchGameSessionsResponse gameSessionlist = null; try { Debug.Log("Searching for game sessions"); gameSessionlist = M_gameLiftClient.SearchGameSessions(request); Debug.Log("Done Searching for game sessions"); } catch (Exception ex) { Handler(ex); } if (gameSessionlist == null) { Debug.Log("Unable to search for Game Sessions... What now?"); return(null); } int sessionsFound = gameSessionlist.GameSessions.Count; Debug.Log("Gamesessions found: " + sessionsFound); GameSession gameSession = null; for (int i = 0; i < sessionsFound; ++i) { //TODO: Implement logic here to determine best server. //Join first valid result returned GameSession gameSessionCandidate = gameSessionlist.GameSessions[i]; int currentPlayerCount = gameSessionCandidate.CurrentPlayerSessionCount; int maxPlayerCount = gameSessionCandidate.MaximumPlayerSessionCount; var creationPolicy = gameSessionCandidate.PlayerSessionCreationPolicy; // TODO: This is always null... How do we get the server to set this variable? if (currentPlayerCount < maxPlayerCount) // TODO: This if check will be useless once we implement the filter in the search game session request. { gameSession = gameSessionCandidate; break; } } if (gameSession == null) { Debug.Log("Unable to join any game sessions found. We should create one now..."); return(null); //TODO: Note: If we create a game session here and immediately try to join it, it may fail because the server status will not be set to "ACTIVE" yet. //https://gamedev.amazon.com/forums/questions/61279/how-to-add-player-to-server-work-flow-using-gameli.html } Debug.Log("Game session successfully found"); return(gameSession); }