public void SendMessage(string msgId, params object[] args)
 {
     StoryMessageInfo msgInfo = new StoryMessageInfo();
     msgInfo.m_sMsgId = msgId;
     msgInfo.m_oArgs = args;
     m_queueMessageInfoQueue.Enqueue(msgInfo);
 }
示例#2
0
    public void Tick(long curTime)
    {
        long delta = 0;

        if (m_lLastTickTime == 0)
        {
            m_lLastTickTime = curTime;
        }
        else
        {
            delta           = curTime - m_lLastTickTime;
            m_lLastTickTime = curTime;
            m_lCurtime     += delta;
        }
        int ct = m_listMessageHandlers.Count;

        if (m_queueMessageInfoQueue.Count > 0)
        {
            int cantTriggerCount     = 0;
            int triggerCount         = 0;
            StoryMessageInfo msgInfo = m_queueMessageInfoQueue.Peek();
            for (int ix = ct - 1; ix >= 0; --ix)
            {
                StoryMessageHandler handler = m_listMessageHandlers[ix];
                if (handler.MessageId == msgInfo.m_sMsgId)
                {
                    if (handler.IsTriggered)
                    {
                        ++cantTriggerCount;
                    }
                    else
                    {
                        handler.Trigger(this, msgInfo.m_oArgs);
                        ++triggerCount;
                    }
                }
            }
            if (cantTriggerCount == 0 || triggerCount > 0)
            {
                m_queueMessageInfoQueue.Dequeue();
            }
        }
        for (int ix = ct - 1; ix >= 0; --ix)
        {
            StoryMessageHandler handler = m_listMessageHandlers[ix];
            if (handler.IsTriggered)
            {
                handler.Tick(this, delta);
            }
        }
    }