TcpRouterClient.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using Slice;
  6. using CommonNetwork_ICE.handler;
  7. using CommonNetwork_ICE.Util;
  8. using CommonNetwork_ICE.Client;
  9. using CommonNetwork_ICE.Session;
  10. using CommonLang.Log;
  11. using System.Threading;
  12. namespace CommonNetwork_ICE.Connector
  13. {
  14. class TcpRouterClient// : Glacier2.Application
  15. {
  16. private static Logger log = LoggerFactory.GetLogger("TcpRouterClient");
  17. private IceTcpClient tcpClient;
  18. private IceClientNetSession netSession;
  19. private ICombatSessionPrx sessionPrx;
  20. private Ice.Communicator ic;
  21. private SessionPingThread ping;
  22. private Thread pingThread = null;
  23. public TcpRouterClient(IceTcpClient tcpClient, IceClientNetSession netSession)
  24. {
  25. this.tcpClient = tcpClient;
  26. this.netSession = netSession;
  27. }
  28. public void Open(Ice.InitializationData initData)
  29. {
  30. int timeOut = 0;
  31. Glacier2.RouterPrx multiRouterPrx;
  32. try
  33. {
  34. ic = Ice.Util.initialize(initData);
  35. multiRouterPrx = Glacier2.RouterPrxHelper.uncheckedCast(ic.getDefaultRouter());
  36. System.Guid guid = System.Guid.NewGuid();
  37. String id = guid.ToString();
  38. sessionPrx = ICombatSessionPrxHelper.checkedCast(multiRouterPrx.createSession("DUMMY_USER", "DUMMY_PWD"));
  39. Ice.ObjectAdapter adapter = ic.createObjectAdapterWithRouter("", multiRouterPrx);
  40. Ice.Identity idengtity = new Ice.Identity(id, multiRouterPrx.getCategoryForClient());
  41. TcpServerCallbackImpl tcpCallbackImpl = new TcpServerCallbackImpl(tcpClient.codec, netSession);
  42. ServerCallbackPrx callback = ServerCallbackPrxHelper.uncheckedCast(adapter.add(tcpCallbackImpl, idengtity));
  43. sessionPrx.SetCallback(callback);
  44. sessionPrx.ice_getConnection().setAdapter(adapter);
  45. adapter.activate();
  46. tcpClient.IsConnected = true;
  47. timeOut = (int)multiRouterPrx.getSessionTimeout();
  48. }
  49. catch (Exception e)
  50. {
  51. netSession.onException(e);
  52. return;
  53. }
  54. if(timeOut > 0)
  55. {
  56. ping = new SessionPingThread(tcpClient, multiRouterPrx, (timeOut * 1000) / 10);
  57. pingThread = new Thread(new ThreadStart(ping.run));
  58. pingThread.Start();
  59. log.Log("开启战斗PING线程.会话过期时间:" + timeOut);
  60. }
  61. return;
  62. }
  63. public void Send(TransMessage transMessage)
  64. {
  65. sessionPrx.begin_ClientToServer(transMessage);
  66. }
  67. public void Close()
  68. {
  69. if (ping != null)
  70. {
  71. ping.done();
  72. ping = null;
  73. try
  74. {
  75. pingThread.Join();
  76. }
  77. catch (Exception e)
  78. {
  79. }
  80. pingThread = null;
  81. }
  82. if (sessionPrx != null)
  83. {
  84. try
  85. {
  86. sessionPrx.ice_getConnection().getAdapter().destroy();
  87. }
  88. catch (Exception e)
  89. {
  90. log.Log("关闭ICE客户端连接器发生异常:" + e.Message);
  91. }
  92. sessionPrx = null;
  93. try
  94. {
  95. ic.shutdown();
  96. }
  97. catch (Exception e)
  98. {
  99. log.Log("关闭ICE通讯通道发生异常:" + e.Message);
  100. }
  101. }
  102. }
  103. }
  104. }