Пример #1
0
        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();
            }
        }
Пример #2
0
        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);
            }
        }