public void SendMessage(string msgId, params object[] args) { StoryMessageInfo msgInfo = new StoryMessageInfo(); msgInfo.m_sMsgId = msgId; msgInfo.m_oArgs = args; m_queueMessageInfoQueue.Enqueue(msgInfo); }
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); } } }