本文整理汇总了C++中OutputMessage_ptr类的典型用法代码示例。如果您正苦于以下问题:C++ OutputMessage_ptr类的具体用法?C++ OutputMessage_ptr怎么用?C++ OutputMessage_ptr使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了OutputMessage_ptr类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: send
void OutputMessagePool::send(OutputMessage_ptr msg)
{
m_outputPoolLock.lock();
OutputMessage::OutputMessageState state = msg->getState();
m_outputPoolLock.unlock();
if(state == OutputMessage::STATE_ALLOCATED_NO_AUTOSEND)
{
#ifdef __DEBUG_NET_DETAIL__
std::cout << "Sending message - SINGLE" << std::endl;
#endif
if(msg->getConnection())
{
if(!msg->getConnection()->send(msg))
{
// Send only fails when connection is closing (or in error state)
// This call will free the message
msg->getProtocol()->onSendMessage(msg);
}
}
else
{
#ifdef __DEBUG_NET__
std::cout << "Error: [OutputMessagePool::send] NULL connection." << std::endl;
#endif
}
}
else
{
#ifdef __DEBUG_NET__
std::cout << "Warning: [OutputMessagePool::send] State != STATE_ALLOCATED_NO_AUTOSEND" << std::endl;
#endif
}
}
示例2: internalSend
void Connection::internalSend(OutputMessage_ptr msg)
{
m_pendingWrite++;
boost::asio::async_write(m_socket,
boost::asio::buffer(msg->getOutputBuffer(), msg->getMessageLength()),
boost::bind(&Connection::onWriteOperation, this, msg, boost::asio::placeholders::error));
}
示例3: OutputMessage_ptr
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;
}
示例4: send
bool Connection::send(OutputMessage_ptr msg) {
LOGt("Connection::send()");
boost::recursive_mutex::scoped_lock lock(m_connectionLock);
if(m_connectionState != CONNECTION_STATE_OPEN || m_writeError)
{
return false;
}
TRACK_MESSAGE(msg);
if(!m_pendingWrite)
{
if(msg->getProtocol())
msg->getProtocol()->onSendMessage(msg);
internalSend(msg);
}
else if(m_pendingWrite > 100 && server.configManager().getBool(ConfigManager::FORCE_CLOSE_SLOW_CONNECTION))
{
LOGd("Forcing slow connection to disconnect!");
close();
}
else
{
OutputMessagePool::getInstance()->autoSend(msg);
}
return true;
}
示例5: send
void OutputMessagePool::send(OutputMessage_ptr msg)
{
OTSYS_THREAD_LOCK(m_outputPoolLock, "");
OutputMessage::OutputMessageState state = msg->getState();
OTSYS_THREAD_UNLOCK(m_outputPoolLock, "");
if(state == OutputMessage::STATE_ALLOCATED_NO_AUTOSEND)
{
#ifdef __DEBUG_NET_DETAIL__
std::cout << "Sending message - SINGLE" << std::endl;
#endif
if(msg->getConnection())
{
if(!msg->getConnection()->send(msg) && msg->getProtocol())
msg->getProtocol()->onSendMessage(msg);
}
#ifdef __DEBUG_NET__
else
std::cout << "Error: [OutputMessagePool::send] NULL connection." << std::endl;
#endif
}
#ifdef __DEBUG_NET__
else
std::cout << "Warning: [OutputMessagePool::send] State != STATE_ALLOCATED_NO_AUTOSEND" << std::endl;
#endif
}
示例6: OutputMessage_ptr
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;
}
示例7: adminCommandSendMail
void ProtocolAdmin::adminCommandSendMail(const std::string& xmlData)
{
OutputMessage_ptr output = OutputMessagePool::getInstance()->getOutputMessage(this, false);
if(!output)
return;
std::string name;
TRACK_MESSAGE(output);
if(Item* mailItem = Admin::createMail(xmlData, name))
{
if(IOLoginData::getInstance()->playerMail(NULL, name, mailItem))
{
addLogLine(LOGTYPE_EVENT, "sent mailbox to " + name);
output->put<char>(AP_MSG_COMMAND_OK);
}
else
{
addLogLine(LOGTYPE_EVENT, "failed sending mailbox to " + name);
output->put<char>(AP_MSG_COMMAND_FAILED);
output->putString("could not send the box");
}
}
else
{
addLogLine(LOGTYPE_EVENT, "failed parsing mailbox");
output->put<char>(AP_MSG_COMMAND_FAILED);
output->putString("could not parse the box");
}
OutputMessagePool::getInstance()->send(output);
}
示例8: adminCommandKickPlayer
void ProtocolAdmin::adminCommandKickPlayer(const std::string& name)
{
OutputMessage_ptr output = OutputMessagePool::getInstance()->getOutputMessage(this, false);
if(output)
{
TRACK_MESSAGE(output);
Player* player = g_game.getPlayerByName(name);
if(player)
{
player->kickPlayer(false);
addLogLine(this, LOGTYPE_EVENT, 1, "kicked player " + name);
output->AddByte(AP_MSG_COMMAND_OK);
}
else
{
addLogLine(this, LOGTYPE_WARNING, 1, "Could not kick player (not online): " + name);
output->AddByte(AP_MSG_COMMAND_FAILED);
output->AddString("player is not online");
}
OutputMessagePool::getInstance()->send(output);
}
}
示例9: send
bool Connection::send(OutputMessage_ptr msg)
{
m_connectionLock.lock();
if(m_closeState == CLOSE_STATE_CLOSING || m_writeError)
{
m_connectionLock.unlock();
return false;
}
msg->getProtocol()->onSendMessage(msg);
if(m_pendingWrite == 0)
{
#ifdef __DEBUG_NET_DETAIL__
std::clog << "Connection::send " << msg->getMessageLength() << std::endl;
#endif
internalSend(msg);
}
else
{
#ifdef __DEBUG_NET__
std::clog << "Connection::send Adding to queue " << msg->getMessageLength() << std::endl;
#endif
m_outputQueue.push_back(msg);
}
m_connectionLock.unlock();
return true;
}
示例10: OutputMessage_ptr
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;
}
示例11: getOutputBuffer
void ProtocolSpectator::writeToOutputBuffer(const NetworkMessage& msg)
{
OutputMessage_ptr out = getOutputBuffer(msg.getLength());
if (out) {
out->append(msg);
}
}
示例12: disconnectClient
void ProtocolLogin::disconnectClient(uint8_t error, const char* message)
{
OutputMessage_ptr output = OutputMessagePool::getInstance()->getOutputMessage(this, false);
if (output) {
output->AddByte(error);
output->AddString(message);
OutputMessagePool::getInstance()->send(output);
}
getConnection()->closeConnection();
}
示例13: dispatchedDisconnectClient
void ProtocolOld::dispatchedDisconnectClient(const std::string& message)
{
OutputMessage_ptr output = OutputMessagePool::getInstance()->getOutputMessage(this, false);
if (output) {
output->addByte(0x0A);
output->addString(message);
OutputMessagePool::getInstance()->send(output);
}
getConnection()->close();
}
示例14: disconnectClient
void ProtocolLogin::disconnectClient(const std::string& message, uint16_t version)
{
OutputMessage_ptr output = OutputMessagePool::getInstance()->getOutputMessage(this, false);
if (output) {
output->addByte(version >= 1076 ? 0x0B : 0x0A);
output->addString(message);
OutputMessagePool::getInstance()->send(output);
}
getConnection()->close();
}
示例15: addLogLine
void ProtocolAdmin::adminCommandPayHouses()
{
Houses::getInstance().payHouses();
addLogLine(this, LOGTYPE_EVENT, 1, "pay houses ok");
OutputMessage_ptr output = OutputMessagePool::getInstance()->getOutputMessage(this, false);
if(output){
TRACK_MESSAGE(output);
output->AddByte(AP_MSG_COMMAND_OK);
OutputMessagePool::getInstance()->send(output);
}
}