您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ IsConnectionIdle函数代码示例

51自学网 2021-06-01 21:40:36
  C++
这篇教程C++ IsConnectionIdle函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中IsConnectionIdle函数的典型用法代码示例。如果您正苦于以下问题:C++ IsConnectionIdle函数的具体用法?C++ IsConnectionIdle怎么用?C++ IsConnectionIdle使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了IsConnectionIdle函数的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: UpdateTimeOutTime

/// Update the WorldSession (triggered by World update)bool WorldSession::Update(uint32 diff, PacketFilter& updater){    /// Update Timeout timer.    UpdateTimeOutTime(diff);    ///- Before we process anything:    /// If necessary, kick the player from the character select screen    if (IsConnectionIdle())        m_Socket->CloseSocket();    UpdateNodeIO(diff, updater);    UpdateClientIO(diff, updater);    ProcessQueryCallbacks();    //check if we are safe to proceed with logout    //logout procedure should happen only in World::UpdateSessions() method!!!    if (updater.ProcessLogout())    {        time_t currTime = time(NULL);        ///- If necessary, log the player out        if (ShouldLogOut(currTime) && !m_playerLoading)            LogoutPlayer(true);        ///- Cleanup socket pointer if need        if (m_Socket && m_Socket->IsClosed())        {            m_Socket->RemoveReference();            m_Socket = NULL;        }        if (!m_Socket)            return false;                                       //Will remove this session from the world session map    }    return true;}
开发者ID:Zakamurite,项目名称:TrilliumEMU,代码行数:37,


示例2: UpdateTimeOutTime

/// Update the WorldSession (triggered by World update)bool WorldSession::Update(uint32 diff, PacketFilter& updater){    /// Update Timeout timer.    UpdateTimeOutTime(diff);    ///- Before we process anything:    /// If necessary, kick the player from the character select screen    if (IsConnectionIdle())        m_Socket->CloseSocket();    ///- Retrieve packets from the receive queue and call the appropriate handlers    /// not process packets if socket already closed    WorldPacket* packet = NULL;    //! Delete packet after processing by default    bool deletePacket = true;    //! To prevent infinite loop    WorldPacket* firstDelayedPacket = NULL;    //! If _recvQueue.peek() == firstDelayedPacket it means that in this Update call, we've processed all    //! *properly timed* packets, and we're now at the part of the queue where we find    //! delayed packets that were re-enqueued due to improper timing. To prevent an infinite    //! loop caused by re-enqueueing the same packets over and over again, we stop updating this session    //! and continue updating others. The re-enqueued packets will be handled in the next Update call for this session.    while (m_Socket && !m_Socket->IsClosed() &&            !_recvQueue.empty() && _recvQueue.peek(true) != firstDelayedPacket &&            _recvQueue.next(packet, updater))    {        if (packet->GetOpcode() >= NUM_MSG_TYPES)        {            sLog->outError("SESSION: received non-existed opcode %s (0x%.4X)", LookupOpcodeName(packet->GetOpcode()), packet->GetOpcode());            sScriptMgr->OnUnknownPacketReceive(m_Socket, WorldPacket(*packet));        }        else        {            OpcodeHandler &opHandle = opcodeTable[packet->GetOpcode()];            try            {                switch (opHandle.status)                {                    case STATUS_LOGGEDIN:                        if (!_player)                        {                            // skip STATUS_LOGGEDIN opcode unexpected errors if player logout sometime ago - this can be network lag delayed packets                            //! If player didn't log out a while ago, it means packets are being sent while the server does not recognize                            //! the client to be in world yet. We will re-add the packets to the bottom of the queue and process them later.                            if (!m_playerRecentlyLogout)                            {                                //! Prevent infinite loop                                if (!firstDelayedPacket)                                    firstDelayedPacket = packet;                                //! Because checking a bool is faster than reallocating memory                                deletePacket = false;                                QueuePacket(packet);                                //! Log                                sLog->outDebug(LOG_FILTER_NETWORKIO, "Re-enqueueing packet with opcode %s (0x%.4X) with with status STATUS_LOGGEDIN. "                                    "Player is currently not in world yet.", opHandle.name, packet->GetOpcode());                            }                        }                        else if (_player->IsInWorld())                        {                            sScriptMgr->OnPacketReceive(m_Socket, WorldPacket(*packet));                            (this->*opHandle.handler)(*packet);                            if (sLog->IsOutDebug() && packet->rpos() < packet->wpos())                                LogUnprocessedTail(packet);                        }                        // lag can cause STATUS_LOGGEDIN opcodes to arrive after the player started a transfer                        break;                    case STATUS_LOGGEDIN_OR_RECENTLY_LOGGOUT:                        if (!_player && !m_playerRecentlyLogout)                            LogUnexpectedOpcode(packet, "STATUS_LOGGEDIN_OR_RECENTLY_LOGGOUT",                                "the player has not logged in yet and not recently logout");                        else                        {                            // not expected _player or must checked in packet handler                            sScriptMgr->OnPacketReceive(m_Socket, WorldPacket(*packet));                            (this->*opHandle.handler)(*packet);                            if (sLog->IsOutDebug() && packet->rpos() < packet->wpos())                                LogUnprocessedTail(packet);                        }                        break;                    case STATUS_TRANSFER:                        if (!_player)                            LogUnexpectedOpcode(packet, "STATUS_TRANSFER", "the player has not logged in yet");                        else if (_player->IsInWorld())                            LogUnexpectedOpcode(packet, "STATUS_TRANSFER", "the player is still in world");                        else                        {                            sScriptMgr->OnPacketReceive(m_Socket, WorldPacket(*packet));                            (this->*opHandle.handler)(*packet);                            if (sLog->IsOutDebug() && packet->rpos() < packet->wpos())                                LogUnprocessedTail(packet);                        }                        break;                    case STATUS_AUTHED:                        // prevent cheating with skip queue wait                        if (m_inQueue)                        {                            LogUnexpectedOpcode(packet, "STATUS_AUTHED", "the player not pass queue yet");                            break;//.........这里部分代码省略.........
开发者ID:Arthus,项目名称:TrinityCore,代码行数:101,


示例3: UpdateTimeOutTime

// Update the WorldSession (triggered by World update)bool WorldSession::Update(uint32 diff){    /// Update Timeout timer.    UpdateTimeOutTime(diff);    ///- Before we process anything:    /// If necessary, kick the player from the character select screen    if (IsConnectionIdle())        m_Socket->CloseSocket();    // Retrieve packets from the receive queue and call the appropriate handlers    // not process packets if socket already closed    WorldPacket* packet;    while (m_Socket && !m_Socket->IsClosed() && _recvQueue.next(packet))    {        /*#if 1        sLog.outError("MOEP: %s (0x%.4X)",                        LookupOpcodeName(packet->GetOpcode()),                        packet->GetOpcode());        #endif*/        if (packet->GetOpcode() >= NUM_MSG_TYPES)        {            sLog.outDebug("SESSION: received invalid opcode %s (0x%.4X)",                LookupOpcodeName(packet->GetOpcode()),                packet->GetOpcode());        }        else        {            OpcodeHandler const& opHandle = opcodeTable[packet->GetOpcode()];            try            {                switch (opHandle.status)                {                    case STATUS_LOGGEDIN:                        if (!_player)                        {                            // skip STATUS_LOGGEDIN opcode unexpected errors if player logout sometime ago - this can be network lag delayed packets                            if (!m_playerRecentlyLogout)                                LogUnexpectedOpcode(packet, "the player has not logged in yet");                        }                        else if (_player->IsInWorld())                            ExecuteOpcode(opHandle, packet);                        // lag can cause STATUS_LOGGEDIN opcodes to arrive after the player started a transfer                        break;                    case STATUS_TRANSFER_PENDING:                        if (!_player)                            LogUnexpectedOpcode(packet, "the player has not logged in yet");                        else if (_player->IsInWorld())                            LogUnexpectedOpcode(packet, "the player is still in world");                        else                            ExecuteOpcode(opHandle, packet);                        break;                    case STATUS_AUTHED:                        // prevent cheating with skip queue wait                        if (m_inQueue)                        {                            LogUnexpectedOpcode(packet, "the player not pass queue yet");                            break;                        }                        m_playerRecentlyLogout = false;                        ExecuteOpcode(opHandle, packet);                        break;                    case STATUS_NEVER:                        sLog.outDebug("SESSION: received not allowed opcode %s (0x%.4X)",                            LookupOpcodeName(packet->GetOpcode()),                            packet->GetOpcode());                        break;                }            }            catch(ByteBufferException &)            {                sLog.outDebug("WorldSession::Update ByteBufferException occured while parsing a packet (opcode: %u) from client %s, accountid=%i. Skipped packet.",                        packet->GetOpcode(), GetRemoteAddress().c_str(), GetAccountId());                if (sLog.IsOutDebug())                {                    sLog.outDebug("Dumping error causing packet:");                    packet->hexlike();                }            }        }        delete packet;    }        ///- If necessary, log the player out    time_t currTime = time(NULL);    if (ShouldLogOut(currTime) && !m_playerLoading)        LogoutPlayer(true);    // Cleanup socket pointer if need    if (m_Socket && m_Socket->IsClosed())    {        m_Socket->RemoveReference();        m_Socket = NULL;    }//.........这里部分代码省略.........
开发者ID:Regolan,项目名称:blizzlikecore,代码行数:101,


示例4: UpdateTimeOutTime

/// Update the WorldSession (triggered by World update)bool WorldSession::Update (uint32 diff, PacketFilter& updater){    /// Update Timeout timer.    UpdateTimeOutTime(diff);    ///- Before we process anything:    /// If necessary, kick the player from the character select screen    if (IsConnectionIdle())        m_Socket->CloseSocket();    ///- Retrieve packets from the receive queue and call the appropriate handlers    /// not process packets if socket already closed    WorldPacket* packet;    while (m_Socket && !m_Socket->IsClosed() && _recvQueue.next(packet, updater))    {        /*#if 1         sLog->outError("MOEP: %s (0x%.4X)",         LookupOpcodeName(packet->GetOpcode()),         packet->GetOpcode());         #endif*/        sLog->outDebug(LOG_FILTER_NETWORKIO, "SESSION: Received opcode 0x%.4X (%s)", packet->GetOpcode(), packet->GetOpcode() > OPCODE_NOT_FOUND ? "nf" : LookupOpcodeName(packet->GetOpcode()));        if (packet->GetOpcode() >= NUM_MSG_TYPES)        {            sLog->outError("SESSION: received non-existed opcode %s (0x%.4X)", LookupOpcodeName(packet->GetOpcode()), packet->GetOpcode());            sScriptMgr->OnUnknownPacketReceive(m_Socket, WorldPacket(*packet));        }        else        {            OpcodeHandler& opHandle = opcodeTable[packet->GetOpcode()];            try            {                switch (opHandle.status)                {                case STATUS_LOGGEDIN:                    if (!_player)                    {                        // skip STATUS_LOGGEDIN opcode unexpected errors if player logout sometime ago - this can be network lag delayed packets                        if (!m_playerRecentlyLogout)                            LogUnexpectedOpcode(packet, "STATUS_LOGGEDIN", "the player has not logged in yet");                    }                    else if (_player->IsInWorld())                    {                        sScriptMgr->OnPacketReceive(m_Socket, WorldPacket(*packet));                        (this->*opHandle.handler)(*packet);                        if (sLog->IsOutDebug() && packet->rpos() < packet->wpos())                            LogUnprocessedTail(packet);                    }                    // lag can cause STATUS_LOGGEDIN opcodes to arrive after the player started a transfer                    break;                case STATUS_LOGGEDIN_OR_RECENTLY_LOGGOUT:                    if (!_player && !m_playerRecentlyLogout)                    {                        LogUnexpectedOpcode(packet, "STATUS_LOGGEDIN_OR_RECENTLY_LOGGOUT", "the player has not logged in yet and not recently logout");                    }                    else                    {                        // not expected _player or must checked in packet hanlder                        sScriptMgr->OnPacketReceive(m_Socket, WorldPacket(*packet));                        (this->*opHandle.handler)(*packet);                        if (sLog->IsOutDebug() && packet->rpos() < packet->wpos())                            LogUnprocessedTail(packet);                    }                    break;                case STATUS_TRANSFER:                    if (!_player)                        LogUnexpectedOpcode(packet, "STATUS_TRANSFER", "the player has not logged in yet");                    else if (_player->IsInWorld())                        LogUnexpectedOpcode(packet, "STATUS_TRANSFER", "the player is still in world");                    else                    {                        sScriptMgr->OnPacketReceive(m_Socket, WorldPacket(*packet));                        (this->*opHandle.handler)(*packet);                        if (sLog->IsOutDebug() && packet->rpos() < packet->wpos())                            LogUnprocessedTail(packet);                    }                    break;                case STATUS_AUTHED:                    // prevent cheating with skip queue wait                    if (m_inQueue)                    {                        LogUnexpectedOpcode(packet, "STATUS_AUTHED", "the player not pass queue yet");                        break;                    }                    // single from authed time opcodes send in to after logout time                    // and before other STATUS_LOGGEDIN_OR_RECENTLY_LOGGOUT opcodes.                    if (packet->GetOpcode() != CMSG_SET_ACTIVE_VOICE_CHANNEL)                        m_playerRecentlyLogout = false;                    sScriptMgr->OnPacketReceive(m_Socket, WorldPacket(*packet));                    (this->*opHandle.handler)(*packet);                    if (sLog->IsOutDebug() && packet->rpos() < packet->wpos())                        LogUnprocessedTail(packet);                    break;                case STATUS_NEVER:                    if (strcmp(LookupOpcodeName(packet->GetOpcode()), "UNKNOWN") == 0)                        sLog->outDebug(LOG_FILTER_NETWORKIO, "received not found opcode 0x%.4X", packet->GetOpcode());//.........这里部分代码省略.........
开发者ID:814077430,项目名称:ArkCORE,代码行数:101,


示例5: getMSTime

/// Update the WorldSession (triggered by World update)bool WorldSession::Update(uint32 diff, PacketFilter& updater){    uint32 sessionDiff = getMSTime();    uint32 nbPacket = 0;    std::map<uint32, OpcodeInfo> pktHandle; // opcodeId / OpcodeInfo    /// Antispam Timer update    if (sWorld->getBoolConfig(CONFIG_ANTISPAM_ENABLED))        UpdateAntispamTimer(diff);    /// Update Timeout timer.    UpdateTimeOutTime(diff);    ///- Before we process anything:    /// If necessary, kick the player from the character select screen    if (IsConnectionIdle())        m_Socket->CloseSocket();    ///- Retrieve packets from the receive queue and call the appropriate handlers    /// not process packets if socket already closed    WorldPacket* packet = NULL;    //! Delete packet after processing by default    bool deletePacket = true;    //! To prevent infinite loop    WorldPacket* firstDelayedPacket = NULL;    //! If _recvQueue.peek() == firstDelayedPacket it means that in this Update call, we've processed all    //! *properly timed* packets, and we're now at the part of the queue where we find    //! delayed packets that were re-enqueued due to improper timing. To prevent an infinite    //! loop caused by re-enqueueing the same packets over and over again, we stop updating this session    //! and continue updating others. The re-enqueued packets will be handled in the next Update call for this session.    uint32 processedPackets = 0;    while (m_Socket && !m_Socket->IsClosed() &&            !_recvQueue.empty() && _recvQueue.peek(true) != firstDelayedPacket &&            _recvQueue.next(packet, updater))    {        const OpcodeHandler* opHandle = opcodeTable[packet->GetOpcode()];        uint32 pktTime = getMSTime();        try        {            switch (opHandle->status)            {                case STATUS_LOGGEDIN:                    if (!_player)                    {                        // skip STATUS_LOGGEDIN opcode unexpected errors if player logout sometime ago - this can be network lag delayed packets                        //! If player didn't log out a while ago, it means packets are being sent while the server does not recognize                        //! the client to be in world yet. We will re-add the packets to the bottom of the queue and process them later.                        if (!m_playerRecentlyLogout)                        {                            //! Prevent infinite loop                            if (!firstDelayedPacket)                                firstDelayedPacket = packet;                            //! Because checking a bool is faster than reallocating memory                            deletePacket = false;                            QueuePacket(packet);                            //! Log                                sLog->outDebug(LOG_FILTER_NETWORKIO, "Re-enqueueing packet with opcode %s with with status STATUS_LOGGEDIN. "                                    "Player is currently not in world yet.", GetOpcodeNameForLogging(packet->GetOpcode()).c_str());                        }                    }                    else if (_player->IsInWorld())                    {                        sScriptMgr->OnPacketReceive(m_Socket, WorldPacket(*packet));#ifdef ELUNA                        if (!sEluna->OnPacketReceive(this, *packet))                            break;#endif                        (this->*opHandle->handler)(*packet);                        if (sLog->ShouldLog(LOG_FILTER_NETWORKIO, LOG_LEVEL_TRACE) && packet->rpos() < packet->wpos())                            LogUnprocessedTail(packet);                    }                    // lag can cause STATUS_LOGGEDIN opcodes to arrive after the player started a transfer                    break;                case STATUS_LOGGEDIN_OR_RECENTLY_LOGGOUT:                    if (!_player && !m_playerRecentlyLogout && !m_playerLogout) // There's a short delay between _player = null and m_playerRecentlyLogout = true during logout                        LogUnexpectedOpcode(packet, "STATUS_LOGGEDIN_OR_RECENTLY_LOGGOUT",                            "the player has not logged in yet and not recently logout");                    else                    {                        // not expected _player or must checked in packet hanlder                        sScriptMgr->OnPacketReceive(m_Socket, WorldPacket(*packet));#ifdef ELUNA                        if (!sEluna->OnPacketReceive(this, *packet))                            break;#endif                        (this->*opHandle->handler)(*packet);                        if (sLog->ShouldLog(LOG_FILTER_NETWORKIO, LOG_LEVEL_TRACE) && packet->rpos() < packet->wpos())                            LogUnprocessedTail(packet);                    }                    break;                case STATUS_TRANSFER:                    if (!_player)                        LogUnexpectedOpcode(packet, "STATUS_TRANSFER", "the player has not logged in yet");                    else if (_player->IsInWorld())                        LogUnexpectedOpcode(packet, "STATUS_TRANSFER", "the player is still in world");                    else                    {                        sScriptMgr->OnPacketReceive(m_Socket, WorldPacket(*packet));//.........这里部分代码省略.........
开发者ID:RezolveX,项目名称:MistCore_Eluna,代码行数:101,


示例6: UpdateTimeOutTime

/// Update the WorldSession (triggered by World update)bool WorldSession::Update(uint32 diff, PacketFilter& updater){    /// Update Timeout timer.    UpdateTimeOutTime(diff);    ///- Before we process anything:    /// If necessary, kick the player from the character select screen    if (IsConnectionIdle())        m_Socket->CloseSocket();    ///- Retrieve packets from the receive queue and call the appropriate handlers    /// not process packets if socket already closed    WorldPacket* packet = NULL;    //! Delete packet after processing by default    bool deletePacket = true;    //! To prevent infinite loop    WorldPacket* firstDelayedPacket = NULL;    //! If _recvQueue.peek() == firstDelayedPacket it means that in this Update call, we've processed all    //! *properly timed* packets, and we're now at the part of the queue where we find    //! delayed packets that were re-enqueued due to improper timing. To prevent an infinite    //! loop caused by re-enqueueing the same packets over and over again, we stop updating this session    //! and continue updating others. The re-enqueued packets will be handled in the next Update call for this session.    uint32 processedPackets = 0;    while (m_Socket && !m_Socket->IsClosed() &&            !_recvQueue.empty() && _recvQueue.peek(true) != firstDelayedPacket &&            _recvQueue.next(packet, updater))    {        if (!AntiDOS.EvaluateOpcode(*packet))            KickPlayer();        OpcodeHandler const* opHandle = clientOpcodeTable[packet->GetOpcode()];        try        {            switch (opHandle->Status)            {                case STATUS_LOGGEDIN:                    if (!_player)                    {                        // skip STATUS_LOGGEDIN opcode unexpected errors if player logout sometime ago - this can be network lag delayed packets                        //! If player didn't log out a while ago, it means packets are being sent while the server does not recognize                        //! the client to be in world yet. We will re-add the packets to the bottom of the queue and process them later.                        if (!m_playerRecentlyLogout)                        {                            //! Prevent infinite loop                            if (!firstDelayedPacket)                                firstDelayedPacket = packet;                            //! Because checking a bool is faster than reallocating memory                            deletePacket = false;                            QueuePacket(packet);                            //! Log                                TC_LOG_DEBUG("network", "Re-enqueueing packet with opcode %s with with status STATUS_LOGGEDIN. "                                    "Player is currently not in world yet.", GetOpcodeNameForLogging(packet->GetOpcode(), false).c_str());                        }                    }                    else if (_player->IsInWorld())                    {                        sScriptMgr->OnPacketReceive(m_Socket, WorldPacket(*packet));                        (this->*opHandle->Handler)(*packet);                        LogUnprocessedTail(packet);                    }                    // lag can cause STATUS_LOGGEDIN opcodes to arrive after the player started a transfer                    break;                case STATUS_LOGGEDIN_OR_RECENTLY_LOGGOUT:                    if (!_player && !m_playerRecentlyLogout && !m_playerLogout) // There's a short delay between _player = null and m_playerRecentlyLogout = true during logout                        LogUnexpectedOpcode(packet, "STATUS_LOGGEDIN_OR_RECENTLY_LOGGOUT",                            "the player has not logged in yet and not recently logout");                    else                    {                        // not expected _player or must checked in packet hanlder                        sScriptMgr->OnPacketReceive(m_Socket, WorldPacket(*packet));                        (this->*opHandle->Handler)(*packet);                        LogUnprocessedTail(packet);                    }                    break;                case STATUS_TRANSFER:                    if (!_player)                        LogUnexpectedOpcode(packet, "STATUS_TRANSFER", "the player has not logged in yet");                    else if (_player->IsInWorld())                        LogUnexpectedOpcode(packet, "STATUS_TRANSFER", "the player is still in world");                    else                    {                        sScriptMgr->OnPacketReceive(m_Socket, WorldPacket(*packet));                        (this->*opHandle->Handler)(*packet);                        LogUnprocessedTail(packet);                    }                    break;                case STATUS_AUTHED:                    // prevent cheating with skip queue wait                    if (m_inQueue)                    {                        LogUnexpectedOpcode(packet, "STATUS_AUTHED", "the player not pass queue yet");                        break;                    }                    // some auth opcodes can be recieved before STATUS_LOGGEDIN_OR_RECENTLY_LOGGOUT opcodes                    // however when we recieve CMSG_CHAR_ENUM we are surely no longer during the logout process.                    if (packet->GetOpcode() == CMSG_CHAR_ENUM)                        m_playerRecentlyLogout = false;//.........这里部分代码省略.........
开发者ID:BHollowell,项目名称:SkyFire_5xx,代码行数:101,


示例7: UpdateTimeOutTime

/// Update the WorldSession (triggered by World update)bool WorldSession::Update(uint32 diff, PacketFilter& updater){    /// Update Timeout timer.    UpdateTimeOutTime(diff);    ///- Before we process anything:    /// If necessary, kick the player from the character select screen    if (IsConnectionIdle())        m_Socket->CloseSocket();    ///- Retrieve packets from the receive queue and call the appropriate handlers    /// not process packets if socket already closed    WorldPacket* packet = NULL;    //! Delete packet after processing by default    bool deletePacket = true;    //! To prevent infinite loop    WorldPacket* firstDelayedPacket = NULL;    //! If _recvQueue.peek() == firstDelayedPacket it means that in this Update call, we've processed all    //! *properly timed* packets, and we're now at the part of the queue where we find    //! delayed packets that were re-enqueued due to improper timing. To prevent an infinite    //! loop caused by re-enqueueing the same packets over and over again, we stop updating this session    //! and continue updating others. The re-enqueued packets will be handled in the next Update call for this session.    //uint32 processedPackets = 0;    uint32 msTime = getMSTime();    uint32 currentMSTime = msTime;    //bool output = false;    std::list<std::pair<uint32, uint32> > processedOpcodes;    while (m_Socket && !m_Socket->IsClosed() &&        !_recvQueue.empty() && _recvQueue.peek(true) != firstDelayedPacket &&        _recvQueue.next(packet, updater))    {        sLog->outDebug(LOG_FILTER_NETWORKIO, "SESSION: IN opcode %s (0x%.4X)", LookupOpcodeName(packet->GetOpcode()), packet->GetOpcode());        if (packet->GetOpcode() >= NUM_MSG_TYPES)        {            sLog->outError("SESSION: received non-existed opcode %s (0x%.4X)", LookupOpcodeName(packet->GetOpcode()), packet->GetOpcode());            sScriptMgr->OnUnknownPacketReceive(m_Socket, WorldPacket(*packet));        }        else        {            OpcodeHandler &opHandle = opcodeTable[packet->GetOpcode()];            try            {                switch (opHandle.status)                {                    case STATUS_LOGGEDIN:                        if (!_player)                        {                            // skip STATUS_LOGGEDIN opcode unexpected errors if player logout sometime ago - this can be network lag delayed packets                            //! If player didn't log out a while ago, it means packets are being sent while the server does not recognize                            //! the client to be in world yet. We will re-add the packets to the bottom of the queue and process them later.                            if (!m_playerRecentlyLogout)                            {                                //! Prevent infinite loop                                if (!firstDelayedPacket)                                    firstDelayedPacket = packet;                                //! Because checking a bool is faster than reallocating memory                                deletePacket = false;                                QueuePacket(packet);                                //! Log                                sLog->outDebug(LOG_FILTER_NETWORKIO, "Re-enqueueing packet with opcode %s (0x%.4X) with with status STATUS_LOGGEDIN. "                                    "Player is currently not in world yet.", opHandle.name, packet->GetOpcode());                            }                        }                        else if (_player->IsInWorld())                        {                            sScriptMgr->OnPacketReceive(m_Socket, WorldPacket(*packet));                            (this->*opHandle.handler)(*packet);                            if (sLog->IsOutDebug() && packet->rpos() < packet->wpos())                                LogUnprocessedTail(packet);                        }                        // lag can cause STATUS_LOGGEDIN opcodes to arrive after the player started a transfer                        break;                    case STATUS_LOGGEDIN_OR_RECENTLY_LOGGOUT:                        if (!_player && !m_playerRecentlyLogout && !m_playerLogout) // There's a short delay between _player = null and m_playerRecentlyLogout = true during logout                            LogUnexpectedOpcode(packet, "STATUS_LOGGEDIN_OR_RECENTLY_LOGGOUT",                            "the player has not logged in yet and not recently logout");                        else                        {                            // not expected _player or must checked in packet handler                            sScriptMgr->OnPacketReceive(m_Socket, WorldPacket(*packet));                            (this->*opHandle.handler)(*packet);                            if (sLog->IsOutDebug() && packet->rpos() < packet->wpos())                                LogUnprocessedTail(packet);                        }                        break;                    case STATUS_TRANSFER:                        if (!_player)                            LogUnexpectedOpcode(packet, "STATUS_TRANSFER", "the player has not logged in yet");                        else if (_player->IsInWorld())                            LogUnexpectedOpcode(packet, "STATUS_TRANSFER", "the player is still in world");                        else                        {                            sScriptMgr->OnPacketReceive(m_Socket, WorldPacket(*packet));//.........这里部分代码省略.........
开发者ID:Allowed,项目名称:Strawberry335,代码行数:101,


示例8: UpdateTimeOutTime

/// Update the WorldSession (triggered by World update)bool WorldSession::Update(uint32 diff){    /// Update Timeout timer.    UpdateTimeOutTime(diff);        ///- Before we process anything:        /// If necessary, kick the player from the character select screen    if (IsConnectionIdle())        m_Socket->CloseSocket();        ///- Retrieve packets from the receive queue and call the appropriate handlers    /// not proccess packets if socket already closed    WorldPacket* packet;    while (m_Socket && !m_Socket->IsClosed() && _recvQueue.next(packet))    {        /*#if 1        sLog.outError("MOEP: %s (0x%.4X)",                        LookupOpcodeName(packet->GetOpcode()),                        packet->GetOpcode());        #endif*/        if (packet->GetOpcode() >= NUM_MSG_TYPES)        {            sLog.outError("SESSION: received non-existed opcode %s (0x%.4X)",                LookupOpcodeName(packet->GetOpcode()),                packet->GetOpcode());        }        else        {            OpcodeHandler& opHandle = opcodeTable[packet->GetOpcode()];            try            {                switch (opHandle.status)                {                    case STATUS_LOGGEDIN:                        if (!_player)                        {                            // skip STATUS_LOGGEDIN opcode unexpected errors if player logout sometime ago - this can be network lag delayed packets                            if (!m_playerRecentlyLogout)                                LogUnexpectedOpcode(packet, "the player has not logged in yet");                        }                        else if (_player->IsInWorld())                        {                            (this->*opHandle.handler)(*packet);                            if (sLog.IsOutDebug() && packet->rpos() < packet->wpos())                                LogUnprocessedTail(packet);							// PlayerBot mod: if this player has bots let the 							// botAI see the masters packet							if(!m_playerBots.empty())								PlayerbotAI::HandleMasterIncomingPacket(*packet, *this);                        }                        // lag can cause STATUS_LOGGEDIN opcodes to arrive after the player started a transfer                        break;                    case STATUS_LOGGEDIN_OR_RECENTLY_LOGGOUT:                        if (!_player && !m_playerRecentlyLogout)                        {                            LogUnexpectedOpcode(packet, "the player has not logged in yet and not recently logout");                        }                        else                        {                            // not expected _player or must checked in packet hanlder                            (this->*opHandle.handler)(*packet);                            if (sLog.IsOutDebug() && packet->rpos() < packet->wpos())                                LogUnprocessedTail(packet);                        }                        break;                    case STATUS_TRANSFER:                        if (!_player)                            LogUnexpectedOpcode(packet, "the player has not logged in yet");                        else if (_player->IsInWorld())                            LogUnexpectedOpcode(packet, "the player is still in world");                        else                        {                            (this->*opHandle.handler)(*packet);                            if (sLog.IsOutDebug() && packet->rpos() < packet->wpos())                                LogUnprocessedTail(packet);                        }                        break;                    case STATUS_AUTHED:                        // prevent cheating with skip queue wait                        if (m_inQueue)                        {                            LogUnexpectedOpcode(packet, "the player not pass queue yet");                            break;                        }                        // single from authed time opcodes send in to after logout time                        // and before other STATUS_LOGGEDIN_OR_RECENTLY_LOGGOUT opcodes.                        if (packet->GetOpcode() != CMSG_SET_ACTIVE_VOICE_CHANNEL)                            m_playerRecentlyLogout = false;                        (this->*opHandle.handler)(*packet);                        if (sLog.IsOutDebug() && packet->rpos() < packet->wpos())                            LogUnprocessedTail(packet);                        break;                    case STATUS_NEVER:                        /*                        sLog.outError("SESSION: received not allowed opcode %s (0x%.4X)",//.........这里部分代码省略.........
开发者ID:Mferrill,项目名称:BotCore,代码行数:101,


示例9: while

//.........这里部分代码省略.........                        {                            // skip STATUS_LOGGEDIN opcode unexpected errors if player logout sometime ago - this can be network lag delayed packets                            if (!m_playerRecentlyLogout)                                LogUnexpectedOpcode(packet, "the player has not logged in yet");                        }                        else if (_player->IsInWorld())                        {                            (this->*opHandle.handler)(*packet);                            if (sLog.IsOutDebug() && packet->rpos() < packet->wpos())                                LogUnprocessedTail(packet);                        }                        // lag can cause STATUS_LOGGEDIN opcodes to arrive after the player started a transfer                        break;                    case STATUS_LOGGEDIN_OR_RECENTLY_LOGGOUT:                        if (!_player && !m_playerRecentlyLogout)                        {                            LogUnexpectedOpcode(packet, "the player has not logged in yet and not recently logout");                        }                        else                        {                            // not expected _player or must checked in packet hanlder                            (this->*opHandle.handler)(*packet);                            if (sLog.IsOutDebug() && packet->rpos() < packet->wpos())                                LogUnprocessedTail(packet);                        }                        break;                    case STATUS_TRANSFER:                        if (!_player)                            LogUnexpectedOpcode(packet, "the player has not logged in yet");                        else if (_player->IsInWorld())                            LogUnexpectedOpcode(packet, "the player is still in world");                        else                        {                            (this->*opHandle.handler)(*packet);                            if (sLog.IsOutDebug() && packet->rpos() < packet->wpos())                                LogUnprocessedTail(packet);                        }                        break;                    case STATUS_AUTHED:                        // prevent cheating with skip queue wait                        if (m_inQueue)                        {                            LogUnexpectedOpcode(packet, "the player not pass queue yet");                            break;                        }                        // single from authed time opcodes send in to after logout time                        // and before other STATUS_LOGGEDIN_OR_RECENTLY_LOGGOUT opcodes.                        if (packet->GetOpcode() != CMSG_SET_ACTIVE_VOICE_CHANNEL)                            m_playerRecentlyLogout = false;                        (this->*opHandle.handler)(*packet);                        if (sLog.IsOutDebug() && packet->rpos() < packet->wpos())                            LogUnprocessedTail(packet);                        break;                    case STATUS_NEVER:                        /*                        sLog.outError("SESSION: received not allowed opcode %s (0x%.4X)",                            LookupOpcodeName(packet->GetOpcode()),                            packet->GetOpcode());                        */                        break;                }            }            catch(ByteBufferException &)            {                sLog.outError("WorldSession::Update ByteBufferException occured while parsing a packet (opcode: %u) from client %s, accountid=%i. Skipped packet.",                        packet->GetOpcode(), GetRemoteAddress().c_str(), GetAccountId());                if (sLog.IsOutDebug())                {                    sLog.outDebug("Dumping error causing packet:");                    packet->hexlike();                }            }        }        delete packet;    }    ///- If necessary, kick the player from the character select screen    if (IsConnectionIdle())        m_Socket->CloseSocket();    ///- Cleanup socket pointer if need    if (m_Socket && m_Socket->IsClosed())    {        m_Socket->RemoveReference();        m_Socket = NULL;    }    ///- If necessary, log the player out    time_t currTime = time(NULL);    if (!m_Socket || (ShouldLogOut(currTime) && !m_playerLoading))        LogoutPlayer(true);    if (!m_Socket)        return false;                                       //Will remove this session from the world session map    return true;}
开发者ID:GameOn,项目名称:gameon,代码行数:101,


示例10: UpdateTimeOutTime

/// Update the WorldSession (triggered by World update)bool WorldSession::Update(uint32 diff, PacketFilter& updater){    /// Update Timeout timer.    UpdateTimeOutTime(diff);    ///- Before we process anything:    /// If necessary, kick the player from the character select screen    if (IsConnectionIdle())        m_Socket->CloseSocket();    const uint32 opcodeMinTime = 50;    uint32 opcodeStartTime;    uint32 opcodeProcessTime;    ///- Retrieve packets from the receive queue and call the appropriate handlers    /// not process packets if socket already closed    WorldPacket* packet = NULL;    //! Delete packet after processing by default    bool deletePacket = true;    //! To prevent infinite loop    WorldPacket* firstDelayedPacket = NULL;    //! If _recvQueue.peek() == firstDelayedPacket it means that in this Update call, we've processed all    //! *properly timed* packets, and we're now at the part of the queue where we find    //! delayed packets that were re-enqueued due to improper timing. To prevent an infinite    //! loop caused by re-enqueueing the same packets over and over again, we stop updating this session    //! and continue updating others. The re-enqueued packets will be handled in the next Update call for this session.    while (m_Socket && !m_Socket->IsClosed() &&            !_recvQueue.empty() && _recvQueue.peek(true) != firstDelayedPacket &&            _recvQueue.next(packet, updater))    {        opcodeStartTime = getMSTime();        OpcodeHandler const* opHandle = opcodeTable[packet->GetOpcode()];        try        {            switch (opHandle->Status)            {                case STATUS_LOGGEDIN:                    if (!_player)                    {                        // skip STATUS_LOGGEDIN opcode unexpected errors if player logout sometime ago - this can be network lag delayed packets                        //! If player didn't log out a while ago, it means packets are being sent while the server does not recognize                        //! the client to be in world yet. We will re-add the packets to the bottom of the queue and process them later.                        if (!m_playerRecentlyLogout)                        {                            //! Prevent infinite loop                            if (!firstDelayedPacket)                                firstDelayedPacket = packet;                            //! Because checking a bool is faster than reallocating memory                            deletePacket = false;                            QueuePacket(packet);                            //! Log                                sLog->outDebug(LOG_FILTER_NETWORKIO, "Re-enqueueing packet with opcode %s with with status STATUS_LOGGEDIN. "                                    "Player is currently not in world yet.", GetOpcodeNameForLogging(packet->GetOpcode()).c_str());                        }                    }                    else if (_player->IsInWorld())                    {                        sScriptMgr->OnPacketReceive(m_Socket, WorldPacket(*packet));                        (this->*opHandle->Handler)(*packet);                        LogUnprocessedTail(packet);                    }                    // lag can cause STATUS_LOGGEDIN opcodes to arrive after the player started a transfer                    break;                case STATUS_LOGGEDIN_OR_RECENTLY_LOGGOUT:                    if (!_player && !m_playerRecentlyLogout && !m_playerLogout) // There's a short delay between _player = null and m_playerRecentlyLogout = true during logout                        LogUnexpectedOpcode(packet, "STATUS_LOGGEDIN_OR_RECENTLY_LOGGOUT",                            "the player has not logged in yet and not recently logout");                    else                    {                        // not expected _player or must checked in packet hanlder                        sScriptMgr->OnPacketReceive(m_Socket, WorldPacket(*packet));                        (this->*opHandle->Handler)(*packet);                        LogUnprocessedTail(packet);                    }                    break;                case STATUS_TRANSFER:                    if (!_player)                        LogUnexpectedOpcode(packet, "STATUS_TRANSFER", "the player has not logged in yet");                    else if (_player->IsInWorld())                        LogUnexpectedOpcode(packet, "STATUS_TRANSFER", "the player is still in world");                    else                    {                        sScriptMgr->OnPacketReceive(m_Socket, WorldPacket(*packet));                        (this->*opHandle->Handler)(*packet);                        LogUnprocessedTail(packet);                    }                    break;                case STATUS_AUTHED:                    // prevent cheating with skip queue wait                    if (m_inQueue)                    {                        LogUnexpectedOpcode(packet, "STATUS_AUTHED", "the player not pass queue yet");                        break;                    }                    // some auth opcodes can be recieved before STATUS_LOGGEDIN_OR_RECENTLY_LOGGOUT opcodes                    // however when we recieve CMSG_CHAR_ENUM we are surely no longer during the logout process.                    if (packet->GetOpcode() == CMSG_CHAR_ENUM)//.........这里部分代码省略.........
开发者ID:Cryostorm,项目名称:InfinityCore,代码行数:101,


示例11: UpdateTimeOutTime

/// Update the WorldSession (triggered by World update)bool WorldSession::Update(uint32 diff, PacketFilter& updater){    if (updater.ProcessLogout())    {        UpdateTimeOutTime(diff);        if (IsConnectionIdle())            m_Socket->CloseSocket();    }    HandleTeleportTimeout(updater.ProcessLogout());    uint32 _startMSTime = getMSTime();    WorldPacket* packet = NULL;    WorldPacket* movementPacket = NULL;    bool deletePacket = true;    WorldPacket* firstDelayedPacket = NULL;    uint32 processedPackets = 0;    while (m_Socket && !m_Socket->IsClosed() && !_recvQueue.empty() && _recvQueue.peek(true) != firstDelayedPacket && _recvQueue.next(packet, updater))    {        if (packet->GetOpcode() < NUM_MSG_TYPES)        {            OpcodeHandler &opHandle = opcodeTable[packet->GetOpcode()];            try            {                switch (opHandle.status)                {                    case STATUS_LOGGEDIN:                        if (!_player)                        {                            // pussywizard: such packets were sent to do something for a character that has already logged out, skip them                        }                        else if (!_player->IsInWorld())                        {                            // pussywizard: such packets may do something important and the player is just being teleported, move to the end of the queue                            // pussywizard: previously such were skipped, so leave it as it is xD proper code below if we wish to change that                            // pussywizard: requeue only important packets not related to maps (PROCESS_THREADUNSAFE)                            /*if (opHandle.packetProcessing == PROCESS_THREADUNSAFE)                            {                                if (!firstDelayedPacket)                                    firstDelayedPacket = packet;                                deletePacket = false;                                QueuePacket(packet);                            }*/                        }                        else                        {                            if (opHandle.isGrouppedMovementOpcode)                            {                                if (movementPacket)                                    delete movementPacket;                                movementPacket = new WorldPacket(packet->GetOpcode(), 0);                                movementPacket->append(*((ByteBuffer*)packet));                            }                            else                            {                                if (movementPacket)                                {                                    HandleMovementOpcodes(*movementPacket);                                    delete movementPacket;                                    movementPacket = NULL;                                }                                sScriptMgr->OnPacketReceive(this, *packet);#ifdef ELUNA                                if (!sEluna->OnPacketReceive(this, *packet))                                    break;#endif                                (this->*opHandle.handler)(*packet);                            }                        }                        break;                    case STATUS_TRANSFER:                        if (_player && !_player->IsInWorld())                        {                            if (movementPacket)                            {                                delete movementPacket;                                movementPacket = NULL;                            }                            sScriptMgr->OnPacketReceive(this, *packet);#ifdef ELUNA                            if (!sEluna->OnPacketReceive(this, *packet))                                break;#endif                            (this->*opHandle.handler)(*packet);                        }                        break;                    case STATUS_AUTHED:                        if (m_inQueue) // prevent cheating                            break;                        sScriptMgr->OnPacketReceive(this, *packet);#ifdef ELUNA                        if (!sEluna->OnPacketReceive(this, *packet))                            break;#endif                        (this->*opHandle.handler)(*packet);                        break;//.........这里部分代码省略.........
开发者ID:lineagedr,项目名称:azerothcore-wotlk,代码行数:101,



注:本文中的IsConnectionIdle函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ IsConstant函数代码示例
C++ IsConnected函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。