using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using CommonNetwork_ICE.Common; using Slice; using CommonNetwork_ICE.Util; using CommonNetwork_ICE.handler; using CommonLang.Protocol; using CommonNetwork_ICE.Msg; using CommonNetwork_ICE.Session; using CommonLang.Log; using CommonLang.Concurrent; using CommonNetwork_ICE.Connector; namespace CommonNetwork_ICE.Client { /// /// ICE TCP客户端连接器,指定解码器,初始化本对象后可向指定服务器发送ICE消息,接收消息请先绑定会话侦听对象 /// public class IceTcpClient : IceClientConnector { private static Logger log = LoggerFactory.GetLogger("IceTcpClient"); private TcpRouterClient tcpRouterClient; private object closeObj = new object(); public IceTcpClient(IceClientNetSession session) : this(session, Env.ICE_SEND_REMOTE_IP.Clone().ToString(), Env.ICE_SEND_REMOTE_PORT) { } public IceTcpClient(IceClientNetSession session, String ip, int port) : base(session, ip, port) { tcpRouterClient = new TcpRouterClient(this, session); } internal override SenderDisp_ getClientSendHandler(IceClientNetSession session, IceMessageCodec Codec) { return null; } /// /// 初始化ICE接收和发送端 /// public override void Open(int localListenPort) { startIceClientServer(); if (IsConnected) { log.Log("已经连接上服务器IP【" + this.Connector.GetConnectorConfig().RemoteIp + "】和端口【" + this.Connector.GetConnectorConfig().RemotePort + "】,可以正常发送数据。"); } else { throw new Exception("不能连接服务器,请检查远程IP【" + this.Connector.GetConnectorConfig().RemoteIp + "】和端口【" + this.Connector.GetConnectorConfig().RemotePort + "】。"); } } /// /// 开启新线程启动客户端侦听 /// private void startIceClientServer() { try { tcpRouterClient.Open(getInitData()); } catch (Exception err) { session.onException(err); } } /// /// 关闭通讯通道 /// public override void Close() { try { lock (closeObj) { if (IsConnected) { IsConnected = false; tcpRouterClient.Close(); session.onClose(); } } } catch (Exception err) { session.onException(err); } } /// /// 具体的发送方法 /// /// internal override bool SendTo(TransMessage transMessage) { try { tcpRouterClient.Send(transMessage); } catch (Exception e) { session.onException(e); return false; } return true; } /// /// 初始化ICE TCP参数 /// /// private Ice.InitializationData getInitData() { Ice.InitializationData initData = new Ice.InitializationData(); Ice.Properties props = Ice.Util.createProperties(); props.setProperty("Ice.Default.Router", Constants.TCP_GATEWAY_INSTANCE_NAME + "/router:tcp -p " + Connector.GetConnectorConfig().RemotePort + " -h " + Connector.GetConnectorConfig().RemoteIp); props.setProperty("Ice.ACM.Client", "0"); props.setProperty("Ice.RetryIntervals", "-1"); props.setProperty("Ice.Trace.Network", "2"); initData.properties = props; return initData; } } }