OutputMessage_ptr OutputMessagePool::getOutputMessage(Protocol* protocol, bool autosend /*= true*/) { #ifdef __DEBUG_NET_DETAIL__ std::cout << "request output message - auto = " << autosend << std::endl; #endif if(m_shutdown) return OutputMessage_ptr(); OTSYS_THREAD_LOCK_CLASS lockClass(m_outputPoolLock); if(!protocol->getConnection()) return OutputMessage_ptr(); if(m_outputMessages.empty()) { OutputMessage* msg = new OutputMessage(); m_outputMessages.push_back(msg); #ifdef __TRACK_NETWORK__ m_allOutputMessages.push_back(msg); #endif } OutputMessage_ptr omsg; omsg.reset(m_outputMessages.back(), boost::bind(&OutputMessagePool::releaseMessage, this, _1)); m_outputMessages.pop_back(); configureOutputMessage(omsg, protocol, autosend); return omsg; }
OutputMessage_ptr OutputMessagePool::getOutputMessage(Protocol* protocol, bool autosend /*= true*/) { if (!m_isOpen) { return OutputMessage_ptr(); } std::lock_guard<std::recursive_mutex> lockClass(m_outputPoolLock); if (!protocol->getConnection()) { return OutputMessage_ptr(); } if (m_outputMessages.empty()) { OutputMessage* msg = new OutputMessage(); m_outputMessages.push_back(msg); } OutputMessage_ptr outputmessage; outputmessage.reset(m_outputMessages.back(), std::bind(&OutputMessagePool::releaseMessage, this, std::placeholders::_1)); m_outputMessages.pop_back(); configureOutputMessage(outputmessage, protocol, autosend); return outputmessage; }
OutputMessage_ptr OutputMessagePool::getOutputMessage(Protocol* protocol, bool autosend /*= true*/) { #ifdef __DEBUG_NET_DETAIL__ std::cout << "request output message - auto = " << autosend << std::endl; #endif if(!m_isOpen){ return OutputMessage_ptr(); } boost::recursive_mutex::scoped_lock lockClass(m_outputPoolLock); if(protocol->getConnection() == NULL){ return OutputMessage_ptr(); } if(m_outputMessages.empty()){ OutputMessage* msg = new OutputMessage(); m_outputMessages.push_back(msg); #ifdef __TRACK_NETWORK__ m_allOutputMessages.push_back(msg); #endif } OutputMessage_ptr outputmessage; outputmessage.reset(m_outputMessages.back(), boost::bind(&OutputMessagePool::releaseMessage, this, _1)); m_outputMessages.pop_back(); configureOutputMessage(outputmessage, protocol, autosend); return outputmessage; }