示例#1
0
//============================================================
// <T>压入一个消息。</T>
//
// @param pMessage 消息对象
// @return  处理结果
//============================================================
TBool FSharedNetQueue::TryPushTransfer(TNetTransfer* pTransfer){
   MO_ASSERT(pTransfer);
   // 序列化路由数据
   TInt length = 0;
   TByte buffer[MO_NETMESSAGE_MAXLENGTH];
   if(!pTransfer->Serialize(buffer, MO_NETMESSAGE_MAXLENGTH, &length)){
      MO_WARN("Transfer serialize failure. (message_code=%d)", pTransfer->MessageHead().Code());
      return EFalse;
   }
   if(length <= 0){
      MO_WARN("Transfer serialize failure. (message_code=%d, length=%d)", pTransfer->MessageHead().Code(), length);
      return EFalse;
   }
   // 消息检查
   TInt blockLength = *(TInt32*)(TAny*)buffer;
   if(blockLength > MO_NETMESSAGE_MAXLENGTH){
      MO_WARN("Write message length is error. (memory=0x%08X, block_length=%d)", buffer, blockLength);
   }
   if(length > MO_NETMESSAGE_MAXLENGTH){
      MO_WARN("Write data length is error. (memory=0x%08X, data_length=%d)", buffer, length);
   }
   if(blockLength != length){
      MO_WARN("Write data length is not equals. (memory=0x%08X, block_length=%d, data_length=%d)", buffer, blockLength, length);
   }
   // 将数据放入管道
   return TryPush(buffer, length);
}
示例#2
0
bool LFQueue::TryPush(const Buffer& msg)
{
	return TryPush(msg.GetData(), msg.GetSize());
}