Ejemplo n.º 1
0
        public RedisManagedSentinelNode(RedisManagerSettings settings, RedisManagedSentinelListener sentinel,
                                        Action <object, RedisCardioPulseStatus> onPulseStateChange, bool ownsSeed = true)
            : base(settings, RedisRole.Sentinel, sentinel, onPulseStateChange, ownsSeed)
        {
            m_OnPulseStateChange = onPulseStateChange;

            m_EndPoint = GetEndPoint(sentinel);

            if (sentinel != null)
            {
                sentinel.SetOnPulseStateChange(onPulseStateChange);
            }
        }
Ejemplo n.º 2
0
        private RedisEndPoint GetEndPoint(RedisManagedSentinelListener sentinel)
        {
            var result = (RedisEndPoint)null;

            if (sentinel != null)
            {
                var sEndPoint = sentinel.EndPoint;
                if (sEndPoint != null)
                {
                    var ipEP = sEndPoint as IPEndPoint;
                    if (ipEP != null)
                    {
                        result = new RedisEndPoint(ipEP.Address.ToString(), ipEP.Port);
                    }
                    else
                    {
                        result = sEndPoint as RedisEndPoint;
                        if (ReferenceEquals(result, null))
                        {
                            var dnsEP = sEndPoint as DnsEndPoint;
                            if (dnsEP != null)
                            {
                                result = new RedisEndPoint(dnsEP.Host, ipEP.Port);
                            }
                        }
                    }
                }
            }

            if (ReferenceEquals(result, null) || result.IsEmpty)
            {
                var endPoints = Settings.EndPoints;
                if (!endPoints.IsEmpty())
                {
                    result = endPoints.FirstOrDefault(ep => !ReferenceEquals(ep, null) && !ep.IsEmpty);
                }
            }

            return(result ?? RedisEndPoint.Empty);
        }
Ejemplo n.º 3
0
        private RedisManagedNodesGroup ToNodesGroup(RedisRole role, RedisAsyncClient[] clients)
        {
            if (!clients.IsEmpty())
            {
                var baseSettings = Settings;

                var nodeList = new List <RedisManagedNode>();
                foreach (var client in clients)
                {
                    try
                    {
                        if (client != null && client.Connected)
                        {
                            IPEndPoint ipEP = null;

                            var endPoint = client.EndPoint;
                            if (endPoint != null)
                            {
                                ipEP = endPoint as IPEndPoint;
                                if (ipEP == null)
                                {
                                    var dnsEP = endPoint as DnsEndPoint;
                                    if (dnsEP != null)
                                    {
                                        var ipEPs = (new RedisEndPoint(dnsEP.Host, dnsEP.Port)).ResolveHost();
                                        if (!ipEPs.IsEmpty())
                                        {
                                            ipEP = new IPEndPoint(ipEPs[0], dnsEP.Port);
                                        }
                                    }
                                }
                            }

                            if (ipEP == null)
                            {
                                client.Dispose();
                            }
                            else
                            {
                                var settings = (RedisManagerSettings)baseSettings.Clone(ipEP.Address.ToString(), ipEP.Port);

                                if (role == RedisRole.Sentinel)
                                {
                                    var listener = new RedisManagedSentinelListener(client, settings, null);
                                    nodeList.Add(new RedisManagedSentinelNode(settings, listener, null));
                                }
                                else
                                {
                                    var server = new RedisManagedServer(client, settings, role, null);
                                    nodeList.Add(new RedisManagedServerNode(settings, role, server, null));
                                }
                            }
                        }
                    }
                    catch (Exception)
                    {
                        client.Dispose();
                    }
                }

                if (nodeList.Count > 0)
                {
                    var settings = (RedisManagerSettings)Settings;

                    return(role != RedisRole.Sentinel ?
                           (RedisManagedNodesGroup)(new RedisManagedServerGroup(settings, role, nodeList.Cast <RedisManagedServerNode>().ToArray(), null)) :
                           new RedisManagedSentinelGroup(settings, settings.MasterName, nodeList.Cast <RedisManagedSentinelNode>().ToArray(), null));
                }
            }
            return(null);
        }