Beispiel #1
0
        public async Task LeaveAsync(Guid gameId, Guid playerId, Action <bool, Player> onLeaveAction)
        {
            var player = await _playerStorage.GetAsync(gameId, playerId);

            if (player is null)
            {
                return;
            }

            await _playerStorage.DeleteAsync(gameId, playerId);

            var game = await _gameStorage.GetByIdAsync(gameId);

            if (!game.Players.Any())
            {
                await _gameStorage.DeleteAsync(gameId);

                onLeaveAction?.Invoke(true, null);
                return;
            }
            else if (player.IsAdmin)
            {
                await UnauthorizePlayer(game, player);

                var newAdmin = game.Players.GetOldestPlayerInGame();
                await ChangeAdminAsync(gameId, newAdmin.Id);

                onLeaveAction?.Invoke(false, newAdmin);
                return;
            }
            else
            {
                await UnauthorizePlayer(game, player);

                onLeaveAction?.Invoke(false, null);
            }
        }