增加序列号匹配

This commit is contained in:
Stone 2016-06-11 03:43:31 +00:00
parent 060e377e39
commit c2abefe4c8
2 changed files with 9 additions and 5 deletions

View File

@ -211,12 +211,13 @@ bool TokenController::OnReceive(Message& msg)
} }
else else
{ {
auto& tmsg = (TokenMessage&)msg;
// 过滤重复请求。1秒内不接收重复指令 // 过滤重复请求。1秒内不接收重复指令
UInt64 start = Sys.Ms() - 1000; UInt64 start = Sys.Ms() - 5000;
for (int i = 0; i < ArrayLength(_RecvQueue); i++) for (int i = 0; i < ArrayLength(_RecvQueue); i++)
{ {
auto& qi = _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++) for (int i = 0; i < ArrayLength(_RecvQueue); i++)
{ {
@ -224,6 +225,7 @@ bool TokenController::OnReceive(Message& msg)
if (qi.Code == 0 || qi.Time <= start) if (qi.Code == 0 || qi.Time <= start)
{ {
qi.Code = msg.Code; qi.Code = msg.Code;
qi.Seq = tmsg.Seq;
qi.Time = Sys.Ms(); qi.Time = Sys.Ms();
break; break;
@ -405,8 +407,9 @@ bool TokenController::StatReceive(const Message& msg)
auto& qi = _StatQueue[i]; auto& qi = _StatQueue[i];
if (qi.Code == code) 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 < 0) cost = -cost;
if (cost < 1000) if (cost < 1000)
{ {

View File

@ -51,11 +51,12 @@ private:
{ {
public: public:
byte Code; byte Code;
byte Seq;
UInt64 Time; // 时间ms UInt64 Time; // 时间ms
}; };
QueueItem _StatQueue[4]; QueueItem _StatQueue[8];
QueueItem _RecvQueue[4]; QueueItem _RecvQueue[8];
bool StatSend(const Message& msg); bool StatSend(const Message& msg);
bool StatReceive(const Message& msg); bool StatReceive(const Message& msg);