增加序列号匹配

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
{
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)
{

View File

@ -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);