private void Send(object o) { try { while (used) { if (SendBaseNetObjects.Count > 0) { BaseNetObject baseNetObject = SendBaseNetObjects.Dequeue(); NetBaseTool.SendBaseNetObject(socket, baseNetObject); } Thread.Sleep(DELAY); } } catch (SocketException e) { if (t != null) { t.Stop(); } Logger.WriteException(e, "心跳中断"); used = false; return; } }
private void Receive(object o) { try { while (used) { BaseNetObject baseNetObject = NetBaseTool.ReceiveBaseNetObject(socket); if (baseNetObject is HeartBeat) { receiveHeartBeat = true; Logger.WriteLog("receive heartbeat confirm alive"); if (!useHeartBeat) { SendBaseNetObjects.Enqueue(new HeartBeat()); } } else { ReceiveBaseNetObjects.Enqueue(baseNetObject); } Thread.Sleep(DELAY); } } catch (SocketException e) { if (t != null) { t.Stop(); } Logger.WriteException(e, "心跳中断"); used = false; return; } }
//发送心跳包 private void SendHeartBeat(object sender, System.Timers.ElapsedEventArgs e) { if (receiveHeartBeat) { Console.WriteLine("确认存活"); receiveHeartBeat = false; SendBaseNetObjects.Enqueue(new HeartBeat()); } else { Console.WriteLine("心跳中断"); socket.Close(); } }