private void BuildConfig() { CheckIsBuild(); if (connectionInfos == null) { throw new InvalidOperationException("Connections is not config."); } if (serializer == null) { throw new InvalidOperationException("Serializer is not config."); } if (communicationFactory == null) { throw new InvalidOperationException("CommunicationFactory is not config."); } if (protocolStackFactory == null) { protocolStackFactory = new DefaultProtocolStackFactory(); } if (loginHandler == null) { loginHandler = new DefaultLoginHandler(null, serializer, LoggerManager.ClientLoggerFactory); } if (passiveClosedStrategy == null) { passiveClosedStrategy = new DefaultPassiveClosedStrategy(new DefaultPassiveClosedStrategyConfig(), LoggerManager.ClientLoggerFactory); } }
/// <summary> /// 配置客户端被动关闭处理策略 /// </summary> /// <param name="passiveClosedStrategy"></param> /// <returns></returns> public INodeClientBuilder ConfigPassiveClosedStrategy(IPassiveClosedStrategy passiveClosedStrategy) { CheckIsBuild(); this.passiveClosedStrategy = passiveClosedStrategy; return(this); }
/// <summary> /// 构造函数 /// </summary> /// <param name="parameters">NodeClient参数信息</param> public DefaultNodeClient(NodeClientParameters parameters) { if (parameters == null) { throw new NodeClientException("NodeClientConfig is null."); } logger = LoggerManager.ClientLoggerFactory.CreateLogger <DefaultNodeClient>(); Host = parameters.Host; Port = parameters.Port; LocalHost = parameters.LocalHost; LocalPort = parameters.LocalPort; Serializer = parameters.Serializer ?? throw new NodeClientException("Serializer is null."); ProtocolStackFactory = parameters.ProtocolStackFactory ?? new DefaultProtocolStackFactory(); loginHandler = parameters.LoginHandler ?? new DefaultLoginHandler(null, Serializer, LoggerManager.ClientLoggerFactory); passiveClosedStrategy = parameters.PassiveClosedStrategy ?? new DefaultPassiveClosedStrategy(new DefaultPassiveClosedStrategyConfig(), LoggerManager.ClientLoggerFactory); client = parameters.Communication; if (loginHandler != null) { client.OnSubmitLoginRequest += new SubmitLoginRequestDelegate(async() => { var loginInfo = await loginHandler.GetLoginInfo(); return(new LoginRequestData() { Body = loginInfo.Body, Attachments = loginInfo.Attachments }); }); client.OnRecieveLoginResponse += new RecieveLoginResponseDelegate((body, attachments) => { return(loginHandler.LoginResponseHandle(new LoginResponseInfo() { Body = body, Attachments = attachments })); }); client.OnPassiveClosed += new PassiveClosedDelegate(client => { return(passiveClosedStrategy.Handle(client)); }); } }
/// <summary> /// 创建NodeClientParameters实例 /// </summary> /// <param name="connectionInfoList">连接信息</param> /// <param name="serializer">序列化器实例</param> /// <param name="communicationFactory">底层客户端通信组件工厂</param> /// <param name="loginHandler">登录处理器</param> /// <param name="protocolStackFactory">协议栈工厂实例</param> /// <param name="passiveClosedStrategy">客户端被动关闭处理策略</param> /// <returns></returns> public static IList <NodeClientParameters> Create(IList <ConnectionInfo> connectionInfoList, ISerializer serializer, Func <ConnectionInfo, IClient> communicationFactory, ILoginHandler loginHandler = null, IProtocolStackFactory protocolStackFactory = null, IPassiveClosedStrategy passiveClosedStrategy = null) { var list = new List <NodeClientParameters>(); foreach (var connectionInfo in connectionInfoList) { var item = new NodeClientParameters() { Host = connectionInfo.Host, Port = connectionInfo.Port, LocalHost = connectionInfo.LocalHost, LocalPort = connectionInfo.LocalPort, Serializer = serializer, ProtocolStackFactory = protocolStackFactory, LoginHandler = loginHandler, PassiveClosedStrategy = passiveClosedStrategy, Communication = communicationFactory(connectionInfo) }; list.Add(item); } return(list); }