diff --git a/TokenNet/TokenController.cpp b/TokenNet/TokenController.cpp index 6e2fe30f..6ca6cacb 100644 --- a/TokenNet/TokenController.cpp +++ b/TokenNet/TokenController.cpp @@ -211,12 +211,13 @@ bool TokenController::OnReceive(Message& msg) } else { + auto& tmsg = (TokenMessage&)msg; // 过滤重复请求。1秒内不接收重复指令 - UInt64 start = Sys.Ms() - 1000; + UInt64 start = Sys.Ms() - 5000; for (int i = 0; i < ArrayLength(_RecvQueue); i++) { auto& qi = _RecvQueue[i]; - if (qi.Code == msg.Code && qi.Time > start) return true; + if (qi.Code == msg.Code && qi.Seq == tmsg.Seq && qi.Time > start) return true; } for (int i = 0; i < ArrayLength(_RecvQueue); i++) { @@ -224,6 +225,7 @@ bool TokenController::OnReceive(Message& msg) if (qi.Code == 0 || qi.Time <= start) { qi.Code = msg.Code; + qi.Seq = tmsg.Seq; qi.Time = Sys.Ms(); break; @@ -405,8 +407,9 @@ bool TokenController::StatReceive(const Message& msg) auto& qi = _StatQueue[i]; if (qi.Code == code) { - int cost = (int)(Sys.Ms() - qi.Time); + int cost = (int)(Sys.Ms() - (UInt64)qi.Time); // 莫名其妙,有时候竟然是负数 + if (cost < 0) debug_printf("cost=%d qi.Time=%d now=%d \r\n", cost, (int)qi.Time, (int)qi.Time + cost); if (cost < 0) cost = -cost; if (cost < 1000) { diff --git a/TokenNet/TokenController.h b/TokenNet/TokenController.h index d1efbab7..57da02fd 100644 --- a/TokenNet/TokenController.h +++ b/TokenNet/TokenController.h @@ -51,11 +51,12 @@ private: { public: byte Code; + byte Seq; UInt64 Time; // 时间ms }; - QueueItem _StatQueue[4]; - QueueItem _RecvQueue[4]; + QueueItem _StatQueue[8]; + QueueItem _RecvQueue[8]; bool StatSend(const Message& msg); bool StatReceive(const Message& msg);