コード例 #1
0
 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();
 }
コード例 #2
0
        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);
        }