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);
}
}
}