//------------------------------------------------------------------------------------- void Bundle::clear(bool isRecl) { if(pCurrPacket_ != NULL) { packets_.push_back(pCurrPacket_); pCurrPacket_ = NULL; } Packets::iterator iter = packets_.begin(); for (; iter != packets_.end(); ++iter) { if(!isRecl) { delete (*iter); } else { RECLAIM_PACKET(isTCPPacket_, (*iter)); } } packets_.clear(); pChannel_ = NULL; numMessages_ = 0; currMsgID_ = 0; currMsgPacketCount_ = 0; currMsgLength_ = 0; currMsgLengthPos_ = 0; currMsgHandlerLength_ = 0; pCurrMsgHandler_ = NULL; _calcPacketMaxSize(); }
//------------------------------------------------------------------------------------- Bundle::Bundle(const Bundle& bundle) { // 这些必须在前面设置 // 否则中途创建packet可能错误 isTCPPacket_ = bundle.isTCPPacket_; pChannel_ = bundle.pChannel_; pCurrMsgHandler_ = bundle.pCurrMsgHandler_; currMsgID_ = bundle.currMsgID_; Packets::const_iterator iter = bundle.packets_.begin(); for (; iter != bundle.packets_.end(); ++iter) { newPacket(); pCurrPacket_->append(*static_cast<MemoryStream*>((*iter))); packets_.push_back(pCurrPacket_); } pCurrPacket_ = NULL; if(bundle.pCurrPacket_) { newPacket(); pCurrPacket_->append(*static_cast<MemoryStream*>(bundle.pCurrPacket_)); } numMessages_ = bundle.numMessages_; currMsgPacketCount_ = bundle.currMsgPacketCount_; currMsgLength_ = bundle.currMsgLength_; currMsgHandlerLength_ = bundle.currMsgHandlerLength_; currMsgLengthPos_ = bundle.currMsgLengthPos_; _calcPacketMaxSize(); }
//------------------------------------------------------------------------------------- Bundle::Bundle(Channel * pChannel, ProtocolType pt): pChannel_(pChannel), numMessages_(0), pCurrPacket_(NULL), currMsgID_(0), currMsgPacketCount_(0), currMsgLength_(0), currMsgHandlerLength_(0), currMsgLengthPos_(0), packets_(), isTCPPacket_(pt == PROTOCOL_TCP), packetMaxSize_(0), pCurrMsgHandler_(NULL) { _calcPacketMaxSize(); newPacket(); }