Skip to content

Commit 41a609c

Browse files
committed
客户端心跳回调实现
kbengine/kbengine#369
1 parent 5a09b35 commit 41a609c

File tree

2 files changed

+42
-5
lines changed

2 files changed

+42
-5
lines changed

KBEngine.cs

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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,13 +319,24 @@ public void sendTick()
317319
if(!loginappMessageImported_ && !baseappMessageImported_)
318320
return;
319321

320-
TimeSpan span = DateTime.Now - _lastticktime;
322+
TimeSpan span = DateTime.Now - _lastTickTime;
321323

322324
// 更新玩家的位置与朝向到服务端
323325
updatePlayerToServer();
324326

325327
if(span.Seconds > 15)
326328
{
329+
span = _lastTickCBTime - _lastTickTime;
330+
331+
// 如果心跳回调接收时间小于心跳发送时间,说明没有收到回调
332+
// 此时应该通知客户端掉线了
333+
if(span.Seconds < 0)
334+
{
335+
Dbg.ERROR_MSG("sendTick: Receive appTick timeout!");
336+
_networkInterface.close();
337+
return;
338+
}
339+
327340
Message Loginapp_onClientActiveTickMsg = null;
328341
Message Baseapp_onClientActiveTickMsg = null;
329342

@@ -349,10 +362,18 @@ public void sendTick()
349362
}
350363
}
351364

352-
_lastticktime = System.DateTime.Now;
365+
_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
*/

MessageReader.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,22 @@ public void process(byte[] datas, MessageLengthEx offset, MessageLengthEx length
6363
state = READ_STATE.READ_STATE_MSGLEN;
6464
expectSize = 2;
6565
}
66+
else if(msg.msglen == 0)
67+
{
68+
// 如果是0个参数的消息,那么没有后续内容可读了,处理本条消息并且直接跳到下一条消息
69+
#if UNITY_EDITOR
70+
Dbg.profileStart(msg.name);
71+
#endif
72+
73+
msg.handleMessage(stream);
74+
75+
#if UNITY_EDITOR
76+
Dbg.profileEnd(msg.name);
77+
#endif
78+
79+
state = READ_STATE.READ_STATE_MSGID;
80+
expectSize = 2;
81+
}
6682
else
6783
{
6884
expectSize = (MessageLengthEx)msg.msglen;

0 commit comments

Comments
 (0)