예제 #1
0
        protected override async Task InternalConnectAsync(CancellationToken token)
        {
            int roomId = _Options.RoomId;
            DanmakuServerInfo server = await _CredentialProvider.GetDanmakuServerInfoAsync(token);

            ClientWebSocket client = new ClientWebSocket();

            client.Options.KeepAliveInterval = Timeout.InfiniteTimeSpan;
            token.Register(client.Dispose);
            DanmakuServerHostInfo serverHost = server.Hosts[(int)(Stopwatch.GetTimestamp() % server.Hosts.Length)];
            await client.ConnectAsync(new Uri($"wss://{serverHost.Host}:{serverHost.WssPort}/sub"), token);

            await SendJoinRoomAsync(client, roomId, 0, server.Token, token);

            _Client = client;
        }
예제 #2
0
        protected override async Task InternalConnectAsync(CancellationToken token)
        {
            int roomId = _Options.RoomId;
            DanmakuServerInfo server = await _CredentialProvider.GetDanmakuServerInfoAsync(token);

            Socket socket = new Socket(SocketType.Stream, ProtocolType.Tcp);

            socket.SendTimeout = socket.ReceiveTimeout = (int)_Options.HeartbeatInterval.TotalMilliseconds + 10000;
            token.Register(socket.Dispose);
            DanmakuServerHostInfo serverHost = server.Hosts[(int)(Stopwatch.GetTimestamp() % server.Hosts.Length)];

#if NET5_0_OR_GREATER
            await socket.ConnectAsync(serverHost.Host, serverHost.Port, token);
#else
            await socket.ConnectAsync(serverHost.Host, serverHost.Port);
#endif
            await SendJoinRoomAsync(socket, roomId, 0, server.Token, token);

            _Socket = socket;
        }