private void StartHeartbeatSender(TcpClient tcpClient) { StopHeartbeatSender(); heartbeatSenderThread = new Thread(delegate() { heartbeatSenderStarted = true; while (heartbeatSenderStarted) { try { BiliPackWriter.SendMessage(tcpClient.GetStream(), (int)BiliPackWriter.MessageType.HEARTBEAT, ""); } catch (SocketException) { ConnectionFailed?.Invoke("心跳包发送失败"); Disconnect(); } catch (InvalidOperationException) { ConnectionFailed?.Invoke("心跳包发送失败"); Disconnect(); } catch (IOException) { ConnectionFailed?.Invoke("心跳包发送失败"); Disconnect(); } Thread.Sleep(30 * 1000); } }); heartbeatSenderThread.Start(); }
private TcpClient Connect(DanmakuServer danmakuServer) { TcpClient tcpClient = new TcpClient(); tcpClient.Connect(danmakuServer.Server, danmakuServer.Port); NetworkStream networkStream = tcpClient.GetStream(); //string msg = string.Format("{{\"roomid\":{0},\"uid\":{1}}}", danmakuServer,roomId, (long)(1e14 + 2e14 * new Random().NextDouble())); Json.Value initMsg = new Json.Value.Object(); initMsg["uid"] = 0; initMsg["roomid"] = danmakuServer.RoomId; initMsg["protover"] = 2; initMsg["platform"] = "web"; initMsg["clientver"] = "1.9.3"; initMsg["type"] = 2; initMsg["key"] = danmakuServer.Token; try { BiliPackWriter.SendMessage(networkStream, (int)BiliPackWriter.MessageType.CONNECT, initMsg.ToString()); } catch (SocketException) { ConnectionFailed?.Invoke("连接请求发送失败"); Disconnect(); } catch (InvalidOperationException) { ConnectionFailed?.Invoke("连接请求发送失败"); Disconnect(); } catch (IOException) { ConnectionFailed?.Invoke("连接请求发送失败"); Disconnect(); } return(tcpClient); }