123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using Slice;
- using CommonNetwork_ICE.handler;
- using CommonNetwork_ICE.Util;
- using CommonNetwork_ICE.Client;
- using CommonNetwork_ICE.Session;
- using CommonLang.Log;
- using System.Threading;
- namespace CommonNetwork_ICE.Connector
- {
- class TcpRouterClient// : Glacier2.Application
- {
- private static Logger log = LoggerFactory.GetLogger("TcpRouterClient");
- private IceTcpClient tcpClient;
- private IceClientNetSession netSession;
- private ICombatSessionPrx sessionPrx;
- private Ice.Communicator ic;
- private SessionPingThread ping;
- private Thread pingThread = null;
- public TcpRouterClient(IceTcpClient tcpClient, IceClientNetSession netSession)
- {
- this.tcpClient = tcpClient;
- this.netSession = netSession;
- }
- public void Open(Ice.InitializationData initData)
- {
- int timeOut = 0;
- Glacier2.RouterPrx multiRouterPrx;
- try
- {
- ic = Ice.Util.initialize(initData);
- multiRouterPrx = Glacier2.RouterPrxHelper.uncheckedCast(ic.getDefaultRouter());
- System.Guid guid = System.Guid.NewGuid();
- String id = guid.ToString();
- sessionPrx = ICombatSessionPrxHelper.checkedCast(multiRouterPrx.createSession("DUMMY_USER", "DUMMY_PWD"));
- Ice.ObjectAdapter adapter = ic.createObjectAdapterWithRouter("", multiRouterPrx);
- Ice.Identity idengtity = new Ice.Identity(id, multiRouterPrx.getCategoryForClient());
- TcpServerCallbackImpl tcpCallbackImpl = new TcpServerCallbackImpl(tcpClient.codec, netSession);
- ServerCallbackPrx callback = ServerCallbackPrxHelper.uncheckedCast(adapter.add(tcpCallbackImpl, idengtity));
- sessionPrx.SetCallback(callback);
- sessionPrx.ice_getConnection().setAdapter(adapter);
- adapter.activate();
- tcpClient.IsConnected = true;
- timeOut = (int)multiRouterPrx.getSessionTimeout();
- }
- catch (Exception e)
- {
- netSession.onException(e);
- return;
- }
- if(timeOut > 0)
- {
- ping = new SessionPingThread(tcpClient, multiRouterPrx, (timeOut * 1000) / 10);
- pingThread = new Thread(new ThreadStart(ping.run));
- pingThread.Start();
- log.Log("开启战斗PING线程.会话过期时间:" + timeOut);
- }
- return;
- }
- public void Send(TransMessage transMessage)
- {
- sessionPrx.begin_ClientToServer(transMessage);
- }
- public void Close()
- {
- if (ping != null)
- {
- ping.done();
- ping = null;
- try
- {
- pingThread.Join();
- }
- catch (Exception e)
- {
- }
- pingThread = null;
- }
- if (sessionPrx != null)
- {
- try
- {
- sessionPrx.ice_getConnection().getAdapter().destroy();
- }
- catch (Exception e)
- {
- log.Log("关闭ICE客户端连接器发生异常:" + e.Message);
- }
- sessionPrx = null;
- try
- {
- ic.shutdown();
- }
- catch (Exception e)
- {
- log.Log("关闭ICE通讯通道发生异常:" + e.Message);
- }
- }
- }
- }
- }
|