@@ -129,7 +129,8 @@ public struct ServerErr
129129 // 所有服务端错误码对应的错误描述
130130 public static Dictionary < UInt16 , ServerErr > serverErrs = new Dictionary < UInt16 , ServerErr > ( ) ;
131131
132- private System . DateTime _lastticktime = System . DateTime . Now ;
132+ private System . DateTime _lastTickTime = System . DateTime . Now ;
133+ private System . DateTime _lastTickCBTime = System . DateTime . Now ;
133134 private System . DateTime _lastUpdateToServerTime = System . DateTime . Now ;
134135
135136 // 玩家当前所在空间的id, 以及空间对应的资源
@@ -252,7 +253,8 @@ public virtual void reset()
252253 _entityIDAliasIDList . Clear ( ) ;
253254 _bufferedCreateEntityMessage . Clear ( ) ;
254255
255- _lastticktime = System . DateTime . Now ;
256+ _lastTickTime = System . DateTime . Now ;
257+ _lastTickCBTime = System . DateTime . Now ;
256258 _lastUpdateToServerTime = System . DateTime . Now ;
257259
258260 spaceID = 0 ;
@@ -317,7 +319,18 @@ public void sendTick()
317319 if ( ! loginappMessageImported_ && ! baseappMessageImported_ )
318320 return ;
319321
320- TimeSpan span = DateTime . Now - _lastticktime ;
322+ TimeSpan span = _lastTickCBTime - _lastTickTime
323+
324+ // 如果心跳回调接收时间小于心跳发送时间,说明没有收到回调
325+ // 此时应该通知客户端掉线了
326+ if ( span . Seconds < 0 )
327+ {
328+ Dbg . ERROR_MSG ( "sendTick: Receive appTick timeout!" ) ;
329+ networkInterface . close ( ) ;
330+ return ;
331+ }
332+
333+ span = DateTime . Now - _lastTickTime ;
321334
322335 // 更新玩家的位置与朝向到服务端
323336 updatePlayerToServer ( ) ;
@@ -352,7 +365,15 @@ public void sendTick()
352365 _lastticktime = System . DateTime . Now ;
353366 }
354367 }
355-
368+
369+ /*
370+ 服务器心跳回调
371+ */
372+ public void Client_onAppActiveTickCB ( )
373+ {
374+ _lastTickCBTime = System . DateTime . Now ;
375+ }
376+
356377 /*
357378 与服务端握手,与任何一个进程连接之后应该第一时间进行握手
358379 */
0 commit comments