internal void Init(int threadNum, int tickSleepTime, int actionNumPerTick) { m_ThreadNum = threadNum; for (int i = 0; i < threadNum; ++i) { NodeMessageThread thread = new NodeMessageThread(tickSleepTime, actionNumPerTick); m_NodeMessageThreads.Add(thread); } }
internal void DispatchMessage(bool isGmTool, uint seq, int sourceHandle, int destHandle, byte[] data) { try { int index = Interlocked.Increment(ref m_TurnIndex) % m_ThreadNum; NodeMessageThread thread = m_NodeMessageThreads[index]; thread.QueueMessage(isGmTool, seq, sourceHandle, destHandle, data); } catch (Exception ex) { LogSys.Log(LOG_TYPE.ERROR, "NodeMessageManager.DispatchMessage throw exception:{0}\n{1}", ex.Message, ex.StackTrace); } }
internal void Stop() { int threadNum = m_NodeMessageThreads.Count; for (int i = 0; i < threadNum; ++i) { NodeMessageThread thread = m_NodeMessageThreads[i]; thread.Stop(); } }
internal void TickMonitor() { int threadNum = m_NodeMessageThreads.Count; for (int i = 0; i < threadNum; ++i) { NodeMessageThread thread = m_NodeMessageThreads[i]; LogSys.Log(LOG_TYPE.INFO, "NodeMessageManager.ThreadMessagePool {0} buffered {1} messages", thread.Thread.ManagedThreadId, thread.PoolCount); LogSys.Log(LOG_TYPE.MONITOR, "NodeMessageManager.ThreadActionQueue ThreadActionCount {0} {1}", thread.Thread.ManagedThreadId, thread.CurActionNum); } }