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

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) bool TinyController::Dispatch(Stream& ms, Message* pmsg, void* param)
{ {
byte* buf = ms.Current(); /*byte* buf = ms.Current();
// 前移一个字节,确保不是自己的消息时,数据流能够移动 // 前移一个字节,确保不是自己的消息时,数据流能够移动
ms.Seek(1); ms.Seek(1);
@ -300,7 +300,7 @@ bool TinyController::Dispatch(Stream& ms, Message* pmsg, void* param)
} }
// 后移一个字节来弥补 // 后移一个字节来弥补
ms.Seek(-1); ms.Seek(-1);*/
TinyMessage msg; TinyMessage msg;
return Controller::Dispatch(ms, &msg, param); return Controller::Dispatch(ms, &msg, param);
@ -311,6 +311,23 @@ bool TinyController::Valid(const Message& msg)
{ {
TinyMessage& tmsg = (TinyMessage&)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"); TS("TinyController::Valid");
#if MSG_DEBUG #if MSG_DEBUG