不能进行这个优化处理,必须保证每次接收一条完整的微网消息,否则后续将无法分离出粘包的下一条指令

This commit is contained in:
nnhy 2015-11-26 04:50:09 +00:00
parent 1bf54a8d19
commit 950ffca5b6
1 changed files with 19 additions and 2 deletions

View File

@ -278,7 +278,7 @@ void ShowMessage(TinyMessage& msg, bool send, ITransport* port)
bool TinyController::Dispatch(Stream& ms, Message* pmsg, void* param)
{
byte* buf = ms.Current();
/*byte* buf = ms.Current();
// 前移一个字节,确保不是自己的消息时,数据流能够移动
ms.Seek(1);
@ -300,7 +300,7 @@ bool TinyController::Dispatch(Stream& ms, Message* pmsg, void* param)
}
// 后移一个字节来弥补
ms.Seek(-1);
ms.Seek(-1);*/
TinyMessage msg;
return Controller::Dispatch(ms, &msg, param);
@ -311,6 +311,23 @@ bool TinyController::Valid(const Message& msg)
{
TinyMessage& tmsg = (TinyMessage&)msg;
// 代码为0是非法的
if(!msg.Code) return false;
// 没有源地址是很不负责任的
if(!tmsg.Src) return false;
// 非广播包时,源地址和目的地址相同也是非法的
if(tmsg.Dest == tmsg.Src) return false;
// 源地址是自己不要接收
if(tmsg.Src == Address) return false;
// 只处理本机消息或广播消息
//if(tmsg.Dest != Address && tmsg.Dest != 0) return false;
// 不是自己的消息,并且没有设置接收全部
if(Mode < 2 && tmsg.Dest != Address)
{
// 如果不是广播或者不允许广播
if(Mode != 1 || tmsg.Dest != 0) return false;
}
TS("TinyController::Valid");
#if MSG_DEBUG