public override async Task Navigate <TViewModel>()
        {
            if (typeof(TViewModel).Name.Equals(nameof(GameTablesViewModel), StringComparison.CurrentCultureIgnoreCase))
            {
                if (_authTask != null && !_authTask.IsCompleted)
                {
                    _blockUIService.StartBlocking();
                    await _authTask;
                    _blockUIService.StopBlocking();
                }

                if (!_connectTask.IsCompleted)
                {
                    _blockUIService.StartBlocking();
                    await _connectTask;
                    _blockUIService.StopBlocking();
                }

                _navigator.Navigate <GameTablesViewModel>();
            }
            else
            {
                throw new Exception("Ошибка навигации");
            }
        }
        public void StartGame()
        {
            if (GameTable.IsStarted)
            {
                throw new TrueFalseGameException("Игра уже идет");
            }

            if (GameTable.Owner.Id == _stateService.GetSavedPlayer().Id)
            {
                _blockUIService.StartBlocking();

                _mainHubApi.StartGame(new StartGameParams())
                .Then((response) =>
                {
                    if (response.Succeeded)
                    {
                        GameTable.StartGame(response.MoverId.Value, response.PlayerCardsInfo);
                    }
                })
                .Finally(() =>
                {
                    _dispatcher.Invoke(() =>
                    {
                        _blockUIService.StopBlocking();
                    });
                });
            }
        }
Beispiel #3
0
        public void JoinToGameTable(GameTable gameTable)
        {
            if (_stateService.AlreadyPlaying)
            {
                throw new Exception("Пользователь уже находится в игровой комнате");
            }

            _blockUIService.StartBlocking();
            _mainHubClient.JoinToGameTable(new JoinToGameTableParams()
            {
                GameTableId = gameTable.Id
            })
            .Then((response) =>
            {
                if (response.Succeeded)
                {
                    _dispatcher.Invoke(() =>
                    {
                        _blockUIService.StopBlocking();

                        _stateService.SetGameTable(gameTable);
                        Navigate <GameTableViewModel>();
                    });
                }
            });
        }
        private async Task AwaitTasks()
        {
            if (!_authTask.IsCompleted)
            {
                _blockUIService.StartBlocking();
                await _authTask;

                if (!_connectTask.IsCompleted)
                {
                    await _connectTask;
                }

                _blockUIService.StopBlocking();
            }
            else if (_authTask.IsCompleted && _authTask.IsFaulted)
            {
                return; // todo добавить нормальную обработку случая провала подключения к серверу
            }
        }
Beispiel #5
0
        public void Create()
        {
            if (_stateService.AlreadyPlaying)
            {
                throw new Exception("Игрок уже находится за игровым столом");
            }

            if (string.IsNullOrWhiteSpace(GameTable.Name))
            {
                GameTable.Name = GameTableNameGenerator.Generate();
            }

            _blockUIService.StartBlocking();

            _mainHubApi.CreateGameTable(new CreateGameTableParams()
            {
                Name          = GameTable.Name,
                OwnerId       = _stateService.GetSavedPlayer().Id,
                GameTableType = GameTable.Type
            })
            .Then(response =>
            {
                if (response.Succeeded)
                {
                    _stateService.SetGameTable(GameTable as GameTable);

                    _dispatcher.Invoke(() =>
                    {
                        Navigate <GameTableViewModel>();
                    });
                }
            })
            .Finally(() =>
            {
                _dispatcher.Invoke(() =>
                {
                    _blockUIService.StopBlocking();
                });
            });
        }