using System; using System.Collections.Generic; using System.Linq; using System.Text; using CommonNetwork_ICE.Util; using System.Collections; using Slice; using CommonServer_ICE.Session; using CommonLang.Protocol; namespace CommonServer_ICE.Msg { /// /// 服务器发送消息管理器,用来启动应答检测线程 /// internal class SeverSendMsgManager { // 应答检测线程 private static SeverSendMsgQueue[] queueList; // 线程运行控制信号 private static bool runFlag = false; /// /// 启动应答检测线程 /// public static void StartSendMsgQueue() { queueList = new SeverSendMsgQueue[Env.SEND_MSG_ACK_CHECK_THREAD_CNT]; for (int i = 0; i < Env.SEND_MSG_ACK_CHECK_THREAD_CNT; i++) { Hashtable map = new Hashtable(); queueList[i] = new SeverSendMsgQueue(map); queueList[i].Start(); } runFlag = true; } /// /// 停止应答检测线程 /// public static void EndSendMsgQueue() { runFlag = false; for (int i = 0; i < Env.SEND_MSG_ACK_CHECK_THREAD_CNT; i++) { queueList[i].End(); } } /// /// 将关键消息包加入检测线程 /// /// 会话 /// 业务源消息包 /// 关键消息包 public static void AddPacket(IceServerIoSession session, IMessage imessage, TransMessage transMessage) { if (!runFlag) { return; } MsgSessionPacket packet = new MsgSessionPacket(); packet.Session = session; packet.ID = packet.Session.ID.ToString(); packet.Message = transMessage; packet.SrcMessage = imessage; int id = int.Parse(packet.Session.ID); int index = id % Env.SEND_MSG_ACK_CHECK_THREAD_CNT; queueList[index].AddPacket(packet); } } }