SeverSendMsgManager.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using CommonNetwork_ICE.Util;
  6. using System.Collections;
  7. using Slice;
  8. using CommonServer_ICE.Session;
  9. using CommonLang.Protocol;
  10. namespace CommonServer_ICE.Msg
  11. {
  12. /// <summary>
  13. /// 服务器发送消息管理器,用来启动应答检测线程
  14. /// </summary>
  15. internal class SeverSendMsgManager
  16. {
  17. // 应答检测线程
  18. private static SeverSendMsgQueue[] queueList;
  19. // 线程运行控制信号
  20. private static bool runFlag = false;
  21. /// <summary>
  22. /// 启动应答检测线程
  23. /// </summary>
  24. public static void StartSendMsgQueue()
  25. {
  26. queueList = new SeverSendMsgQueue[Env.SEND_MSG_ACK_CHECK_THREAD_CNT];
  27. for (int i = 0; i < Env.SEND_MSG_ACK_CHECK_THREAD_CNT; i++)
  28. {
  29. Hashtable map = new Hashtable();
  30. queueList[i] = new SeverSendMsgQueue(map);
  31. queueList[i].Start();
  32. }
  33. runFlag = true;
  34. }
  35. /// <summary>
  36. /// 停止应答检测线程
  37. /// </summary>
  38. public static void EndSendMsgQueue()
  39. {
  40. runFlag = false;
  41. for (int i = 0; i < Env.SEND_MSG_ACK_CHECK_THREAD_CNT; i++)
  42. {
  43. queueList[i].End();
  44. }
  45. }
  46. /// <summary>
  47. /// 将关键消息包加入检测线程
  48. /// </summary>
  49. /// <param name="session">会话</param>
  50. /// <param name="imessage">业务源消息包</param>
  51. /// <param name="transMessage">关键消息包</param>
  52. public static void AddPacket(IceServerIoSession session, IMessage imessage, TransMessage transMessage)
  53. {
  54. if (!runFlag)
  55. {
  56. return;
  57. }
  58. MsgSessionPacket packet = new MsgSessionPacket();
  59. packet.Session = session;
  60. packet.ID = packet.Session.ID.ToString();
  61. packet.Message = transMessage;
  62. packet.SrcMessage = imessage;
  63. int id = int.Parse(packet.Session.ID);
  64. int index = id % Env.SEND_MSG_ACK_CHECK_THREAD_CNT;
  65. queueList[index].AddPacket(packet);
  66. }
  67. }
  68. }