public void Disconnect() { StopEventListener(); StopHeartbeatSender(); if (DanmakuTcpClient != null) { DanmakuTcpClient.Close(); } if (DanmakuWebSocket != null) { DanmakuWebSocket.CloseAsync(WebSocketCloseStatus.EndpointUnavailable, string.Empty, CancellationToken.None); DanmakuWebSocket.Abort(); DanmakuWebSocket.Dispose(); } Disconnected?.Invoke(); }
public bool Connect() { PingReply pingReply = null; try { pingReply = new Ping().Send("live.bilibili.com"); } catch (Exception) { } if (pingReply == null || pingReply.Status != IPStatus.Success) { ConnectionFailed?.Invoke("网络连接失败"); return(false); } DanmakuServer danmakuServer = GetDanmakuServer(RoomId); if (danmakuServer == null) { return(false); } switch (Protocol) { case Protocols.Tcp: DanmakuTcpClient = GetTcpConnection(danmakuServer); Stream stream = DanmakuTcpClient.GetStream(); stream.ReadTimeout = 30 * 1000 + 1000; stream.WriteTimeout = 30 * 1000 + 1000; PackReader = new BiliPackReader(stream); PackWriter = new BiliPackWriter(stream); break; case Protocols.Ws: DanmakuWebSocket = GetWsConnection(danmakuServer); PackReader = new BiliPackReader(DanmakuWebSocket); PackWriter = new BiliPackWriter(DanmakuWebSocket); break; case Protocols.Wss: DanmakuWebSocket = GetWssConnection(danmakuServer); PackReader = new BiliPackReader(DanmakuWebSocket); PackWriter = new BiliPackWriter(DanmakuWebSocket); break; } if (!InitConnection(danmakuServer)) { Disconnect(); return(false); } StartEventListener(); StartHeartbeatSender(); Connected?.Invoke(); return(true); }