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; }
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; }