bool WorldSocket::iFlushPacketQueue() { WorldPacket* pct; bool haveone = false; while (m_PacketQueue.dequeue_head(pct) == 0) { if (iSendPacket(*pct) == -1) { if (m_PacketQueue.enqueue_head(pct) == -1) { delete pct; sLog.outError("WorldSocket::iFlushPacketQueue m_PacketQueue->enqueue_head"); return false; } break; } else { haveone = true; delete pct; } } return haveone; }
int WorldSocket::SendPacket(const WorldPacket& pkt) { ACE_GUARD_RETURN(LockType, Guard, m_OutBufferLock, -1); if (closing_) { return -1; } WorldPacket pct = pkt; // Dump outgoing packet. sLog.outWorldPacketDump(uint32(get_handle()), pct.GetOpcode(), pct.GetOpcodeName(), &pct, false); if (!sEluna->OnPacketSend(m_Session, pct)) return 0; if (iSendPacket(pct) == -1) { WorldPacket* npct; ACE_NEW_RETURN(npct, WorldPacket(pct), -1); // NOTE maybe check of the size of the queue can be good ? // to make it bounded instead of unbounded if (m_PacketQueue.enqueue_tail(npct) == -1) { delete npct; sLog.outError("WorldSocket::SendPacket: m_PacketQueue.enqueue_tail failed"); return -1; } } return 0; }
int WorldSocket::SendPacket(const WorldPacket& pkt) { std::lock_guard<std::mutex> guard(m_OutBufferLock); if (closing_) return -1; WorldPacket pct = pkt; // Dump outgoing packet. sLog.outWorldPacketDump(uint32(get_handle()), pct.GetOpcode(), pct.GetOpcodeName(), &pct, false); if (iSendPacket(pct) == -1) { WorldPacket* npct; ACE_NEW_RETURN(npct, WorldPacket(pct), -1); // NOTE maybe check of the size of the queue can be good ? // to make it bounded instead of unbounded if (m_PacketQueue.enqueue_tail(npct) == -1) { delete npct; sLog.outError("WorldSocket::SendPacket: m_PacketQueue.enqueue_tail failed"); return -1; } } return 0; }
int WorldSocket::SendPacket (const WorldPacket& pct) { ACE_GUARD_RETURN (LockType, Guard, m_OutBufferLock, -1); if (closing_) return -1; // Dump outgoing packet. if (sWorldLog.LogWorld ()) { sWorldLog.Log ("SERVER:\nSOCKET: %u\nLENGTH: %u\nOPCODE: %s (0x%.4X)\nDATA:\n", (uint32) get_handle (), pct.size (), LookupOpcodeName (pct.GetOpcode ()), pct.GetOpcode ()); uint32 p = 0; while (p < pct.size ()) { for (uint32 j = 0; j < 16 && p < pct.size (); j++) sWorldLog.Log ("%.2X ", const_cast<WorldPacket&>(pct)[p++]); sWorldLog.Log ("\n"); } sWorldLog.Log ("\n\n"); } if (iSendPacket (pct) == -1) { WorldPacket* npct; ACE_NEW_RETURN (npct, WorldPacket (pct), -1); // NOTE maybe check of the size of the queue can be good ? // to make it bounded instead of unbounded if (m_PacketQueue.enqueue_tail (npct) == -1) { delete npct; sLog.outError ("WorldSocket::SendPacket: m_PacketQueue.enqueue_tail failed"); return -1; } } return 0; }