private void Update() { if (IsConnectedToServer) { long timeNow = GameEntry.Timer.GetTimeStamp(); if (timeNow > m_LastPingTime + m_PingInterval) { //发送心跳 m_LastPingTime = timeNow; ReqHeartbeat proto = new ReqHeartbeat(); proto.LocalTime = timeNow; Debug.Log("send heartbeat"); SendMsg(proto); } //如果心跳包过长时间没收到,就关闭连接 if (timeNow - m_LastPongTime > m_PingInterval * 1.5f) { GameEntry.UI.AddTips("服务器断开连接"); Debug.Log("DisConnect To Server"); ReloginEventArgs eventArgs = ReferencePool.Acquire <ReloginEventArgs>(); GameEntry.Event.Fire(this, eventArgs); m_NetworkChannel.Close(); IsConnectedToServer = false; } } }
internal void ReqHeartbeat(MsgPack pack) { ReqHeartbeat data = (ReqHeartbeat)pack.msg; float localTime = data.LocalTime; RspHeartbeat proto = new RspHeartbeat(); proto.LocalTime = localTime; proto.ServerTime = GetTimeStamp(); pack.session.SendMsg(proto); }