Exemplo n.º 1
0
        public T Service <T>(IConnectionToken token) where T : class
        {
            var connectionManage = this.serviceProvider.GetService <IConnectionManage>();
            var connection       = connectionManage.GetConnection(token);

            return(((IWcfConnection)connection).As <T>());
        }
Exemplo n.º 2
0
        public T Service <T>(IConnectionToken token) where T : ClientBase, new()
        {
            var connectionManage = this.serviceProvider.GetService <IConnectionManage>();
            var connection       = connectionManage.GetConnection(token);

            return(((IGrpcConnection)connection).As <T>());
        }
Exemplo n.º 3
0
        public Task <T> Delete <T>(IConnectionToken token, string url)
        {
            var connectionManage = this.serviceProvider.GetService <IConnectionManage>();
            var connection       = connectionManage.GetConnection(token) as IWebApiConnection;

            return(connection.DeleteAsync <T>(url));
        }
Exemplo n.º 4
0
        public Task <T> Put <T>(IConnectionToken token, string url, object data)
        {
            var connectionManage = this.serviceProvider.GetService <IConnectionManage>();
            var connection       = connectionManage.GetConnection(token) as IWebApiConnection;

            return(connection.PutAsync <T>(url, data));
        }
Exemplo n.º 5
0
        public List <ClusterNode> Filter(IConnectionToken token, List <ClusterNode> nodes)
        {
            var list = new List <ClusterNode>();

            foreach (var node in nodes)
            {
                if (!_context.BlackList.Contains(node))
                {
                    list.Add(node);
                }
            }
            return(list);
        }
Exemplo n.º 6
0
        public List <ClusterNode> Filter(IConnectionToken token, List <ClusterNode> nodes)
        {
            var list = new List <ClusterNode>();

            foreach (var node in nodes)
            {
                if (!node.Details.ContainsKey("Authorization"))
                {
                    list.Add(node);
                }
            }
            return(list);
        }
        public List <ClusterNode> Filter(IConnectionToken token, List <ClusterNode> nodes)
        {
            IAuthenticatedConnectionToken authtoken = token as IAuthenticatedConnectionToken;
            var list = new List <ClusterNode>();

            foreach (var item in nodes)
            {
                if (this.authenticateService.Authenticate(item, authtoken))
                {
                    list.Add(item);
                }
            }
            return(list);
        }
        public IClusterConnection GetConnection(IConnectionToken token)
        {
            if (Connections.TryGetValue(token.UniqueKey(), out IClusterConnection value))
            {
                return(value);
            }
            var nodes      = gatewayFilter.GetAvaliableNodes(token);
            var key        = gatewaySelector.GetGateway(nodes);
            var connection = factory.Get(key) as ClusterConnection;

            connection.OnRetryConnect += (gateway) =>
            {
                connection.AcquireLock();
                Task.Factory.StartNew(async() =>
                {
                    var node = this.gatewayProvider.GetClusterNode(gateway);
                    await this.clusterNodeProvider.UpdateClusterNode(node, (x) => { x.NoReply++; });
                    await Task.Delay(TimeSpan.FromSeconds(options.RetryInterval)).ContinueWith(x =>
                    {
                        try
                        {
                            if (connection.RetryTimes > options.MaxRetryTimes)
                            {
                                Connections.TryRemove(token.UniqueKey(), out value);
                                return;
                            }
                            var next = gatewaySelector.GetGateway(gatewayFilter.GetAvaliableNodes(token));
                            connection.UseGateway(next);
                            connection.ReConnect();
                        }
                        catch { }
                        finally {
                            connection.ReleaseLock();
                        }
                    });
                });
            };
            connection.OnDisconnected += (gateway) =>
            {
                Task.Factory.StartNew(async() =>
                {
                    var node = this.gatewayProvider.GetClusterNode(gateway);
                    await this.clusterNodeProvider.UpdateClusterNode(node, (x) => { x.NoReply++; });
                    context.BlackList.Add(node);
                    await Task.Delay(TimeSpan.FromSeconds(options.RestoreInterval));
                    context.BlackList.Remove(node);
                });
            };
            return(connection);
        }
        public List <ClusterNode> GetAvaliableNodes(IConnectionToken token)
        {
            var nodes           = context.ClusterNodes;
            var isAuthenticated = token is IAuthenticatedConnectionToken;

            foreach (var filter in filters)
            {
                if (filter is NoneAuthenticateGatewayFilter && isAuthenticated)
                {
                    continue;
                }
                nodes = filter.Filter(token, nodes);
            }
            return(nodes);
        }
Exemplo n.º 10
0
        public List <ClusterNode> Filter(IConnectionToken token, List <ClusterNode> nodes)
        {
            var list = new List <ClusterNode>();

            foreach (var node in nodes)
            {
                if (node.Details.TryGetValue("name", out string name))
                {
                    if (name.Equals(context.ConnectedServiceName))
                    {
                        list.Add(node);
                    }
                }
            }
            return(list);
        }
Exemplo n.º 11
0
        public List <ClusterNode> Filter(IConnectionToken token, List <ClusterNode> nodes)
        {
            var list = new List <ClusterNode>();

            foreach (var node in nodes)
            {
                if (node.Details.TryGetValue("contract", out string supports))
                {
                    if (supports.IndexOf(token.Name()) >= 0)
                    {
                        list.Add(node);
                    }
                }
            }
            return(list);
        }