Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        /// <summary>
        /// 配置客户端被动关闭处理策略
        /// </summary>
        /// <param name="passiveClosedStrategy"></param>
        /// <returns></returns>
        public INodeClientBuilder ConfigPassiveClosedStrategy(IPassiveClosedStrategy passiveClosedStrategy)
        {
            CheckIsBuild();

            this.passiveClosedStrategy = passiveClosedStrategy;

            return(this);
        }
Beispiel #3
0
        /// <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));
                });
            }
        }
Beispiel #4
0
        /// <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);
        }