public async Task CreateLobby() { try { var game = await this.session.GameService.CreatePracticeGame(new PracticeGameConfig { GameMap = GameMaps.SummonersRift, GameMode = "CLASSIC", AllowSpectators = "NONE", GameTypeConfig = 2, MaxNumPlayers = 10, GamePassword = "******", GameName = "master mor's game", }); if (game?.Name == null) { throw new Exception("Invalid name"); } loop.Setup(PlayLoopType.STANDARD, 0); OnGameDTO(game); } catch (InvocationException x) when(x.RootCause is PlayerAlreadyInGameException) { await loop.Quit(); await CreateLobby(); } }
public async Task CreateLobby(int id) { if (id == 400 || id == 410) { var lcds = await this.session.TeambuilderDraftService.CreateDraftPremade(id); var data = lcds as GameDataObject; var gate = lcds as GatekeeperExceptionObject; var fail = lcds as CallFailedObject; if (fail != null && fail.Status.Contains("INVALID_CONTEXT")) { await this.session.TeambuilderDraftService.Quit(); await CreateLobby(id); } else if (gate != null) { var reason = gate.Content.GatekeeperRestrictions.FirstOrDefault(); throw new InvalidOperationException(reason.Serialize().ToJSON()); } else if (data != null) { var status = await this.session.GameInvitationService.CreateGroupFinderLobby(id, data.Content.PremadeState.PremadeId); loop.Setup(PlayLoopType.DRAFT, id); OnLobbyStatus(status); OnGameData(data); } else { throw new Exception(lcds.Status); } } else { var service = new GameInvitationService(session); var lobby = await service.CreateArrangedTeamLobby(id); if (lobby == null) { throw new Exception("???"); } loop.Setup(PlayLoopType.STANDARD, id); OnLobbyStatus(lobby); } }