示例#1
0
        public override async Task OnConnectedAsync()
        {
            if (!(Context.User.Identity is ClaimsIdentity identity))
            {
                return;
            }

            var playerId  = identity.FindFirst(JwtService.PlayerIdClaim).Value;
            var lobbyCode = identity.FindFirst(JwtService.LobbyCodeClaim).Value;

            if (string.IsNullOrWhiteSpace(playerId) || !Guid.TryParse(playerId, out var playerGuid) ||
                string.IsNullOrWhiteSpace(lobbyCode))
            {
                return;
            }

            var player = _lobbyHandler.GetPlayerDto(playerGuid, lobbyCode);

            if (player == null)
            {
                return;
            }

            _lobbyHandler.SetPlayerIsConnected(playerGuid, true, lobbyCode);
            await Groups.AddToGroupAsync(Context.ConnectionId, lobbyCode);

            await Clients.Groups(lobbyCode).SendAsync("Connect", player.Username);
        }