//============================================================ // <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); }
bool LFQueue::TryPush(const Buffer& msg) { return TryPush(msg.GetData(), msg.GetSize()); }