Beispiel #1
0
//----------------------------------------------------------------------------
//
//----------------------------------------------------------------------------
void MsgMgr::threadPurgeMessages()
{
    MsgChannel * channel = mChannelList->getHeadChannelList();
    while(channel)
    {
        bool signalNewMessages = false;

        u64 minMsgId = 0xffffffffffffffff;

        ChannelListener * listener = channel->getHeadListenerChannel();
        while(listener)
        {
            if(listener->mCurrentMsg)
            {
                if(minMsgId > listener->mCurrentMsg->mMsgRefId)
                    minMsgId = listener->mCurrentMsg->mMsgRefId;
            }
            listener = listener->getNext();
        }

        int numMsgs = 0;
        while(channel->mHeadMsgList && channel->mHeadMsgList->mMsgRefId < minMsgId)
        {
            channel->unlinkAndDestroyStoredMsgHead();

            //numMsgs++;
            //if(numMsgs > PURGE_MAX_MSGS_PER_CHANNEL)
            //{
            //    break;
            //}
        }

        channel = channel->getNext();
    }
}