Esempio n. 1
0
        public override async Task <TResponseData> Send <TResponseData>(IRequest <TResponseData> request,
                                                                        CancellationToken cancelToken = default(CancellationToken))
        {
            if (!ShouldLock(request))
            {
                return(await base.Send(request, cancelToken).ConfigureAwait(false));
            }
            var gameId = ((IHaveGameId)request).GameId;

            using (var i = await _gameLocker.ConfirmLock(gameId, true).ConfigureAwait(false)) {
                HandleCTS(request, i.Token);
                return(await base.Send(request, cancelToken).ConfigureAwait(false));
            }
        }
Esempio n. 2
0
        public async Task <bool> SwitchGame(Guid id)
        {
            using (await _lock.LockAsync().ConfigureAwait(false)) {
                if (_stateHandler.SelectedGameId == id)
                {
                    return(false);
                }

                using (await _locker.ConfirmLock(id).ConfigureAwait(false))
                    await UpdateGameState(id).ConfigureAwait(false);

                return(true);
            }
        }