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