/// <summary> /// 客户端连接代理器,提供了相关的基本操作 /// </summary> /// <param name="channel">客户端连接</param> /// <param name="transactionManager">事务管理器</param> public ThriftConnectionAgent(IMessageTransportChannel <ThriftMessage> channel, ThriftMessageTransactionManager transactionManager) { if (channel == null) { throw new ArgumentNullException("channel"); } if (!channel.IsConnected) { throw new ArgumentException("Cannot wrap this msg channel, because current msg channel has been disconnected!"); } if (transactionManager == null) { throw new ArgumentNullException("transactionManager"); } _sequenceId = 0; _channel = channel; _transactionManager = transactionManager; _channel.Disconnected += ChannelDisconnected; _channel.ReceivedMessage += ChannelReceivedMessage; }
/// <summary> /// 创建一个新的连接代理器 /// </summary> /// <param name="iep">远程终结点地址</param> /// <param name="protocolStack">协议栈</param> /// <param name="transactionManager">事务管理器</param> /// <returns>如果无法连接到远程地址,则返回null.</returns> public static IThriftConnectionAgent Create(IPEndPoint iep, IProtocolStack <ThriftMessage> protocolStack, ThriftMessageTransactionManager transactionManager) { if (iep == null) { throw new ArgumentNullException("iep"); } if (protocolStack == null) { throw new ArgumentNullException("protocolStack"); } if (transactionManager == null) { throw new ArgumentNullException("transactionManager"); } ITransportChannel transportChannel = new TcpTransportChannel(iep); transportChannel.Connect(); if (!transportChannel.IsConnected) { return(null); } IMessageTransportChannel <ThriftMessage> msgChannel = new MessageTransportChannel <ThriftMessage>((IRawTransportChannel)transportChannel, protocolStack, new ThriftProtocolSegmentDataParser((ThriftProtocolStack)protocolStack)); return(new ThriftConnectionAgent(msgChannel, transactionManager)); }
/// <summary> /// 获取具有指定标示的连接代理器,如果具有该条件的代理器不存在,则会创建一个新的代理器 /// </summary> /// <param name="key">连接标示</param> /// <param name="roleId">服务角色编号</param> /// <param name="protocolStack">连接所承载的协议栈</param> /// <param name="transactionManager">事务管理器</param> /// <returns>如果返回null, 则表示当前无法连接到目标远程终结点地址</returns> public IThriftConnectionAgent GetChannel(string key, string roleId, IProtocolStack <ThriftMessage> protocolStack, ThriftMessageTransactionManager transactionManager) { string fullKey = string.Format("{0}#{1}", roleId, key); return(base.GetChannel(key, fullKey, protocolStack, transactionManager)); }