コード例 #1
0
        }                                                                                  // 0

        #endregion Properties

        #region Methods

        public static RedisSentinelNodeInfo[] ParseInfoResponse(RedisRawObject rawObject)
        {
            if (!ReferenceEquals(rawObject, null) &&
                rawObject.Type == RedisRawObjectType.Array)
            {
                var items = rawObject.Items;
                if (items != null)
                {
                    var count = items.Count;
                    if (count > 0)
                    {
                        var isInfoArray = true;
                        for (var i = 0; i < count; i++)
                        {
                            var item = items[i];
                            if (!ReferenceEquals(item, null) &&
                                item.Type != RedisRawObjectType.Array)
                            {
                                isInfoArray = false;
                                break;
                            }
                        }

                        if (!isInfoArray)
                        {
                            var info = new RedisSentinelNodeInfo(rawObject);
                            return(new[] { info });
                        }

                        var list = new List <RedisSentinelNodeInfo>(count);
                        for (var i = 0; i < count; i++)
                        {
                            var item = items[i];
                            if (!ReferenceEquals(item, null) && item.Type == RedisRawObjectType.Array)
                            {
                                var info = new RedisSentinelNodeInfo(item);
                                list.Add(info);
                            }
                        }

                        if (list.Count > 0)
                        {
                            return(list.ToArray());
                        }
                    }
                }
            }
            return(null);
        }
コード例 #2
0
        private NodeRoleAndSiblings GetSiblingSentinelsOfSentinel(string masterName, IRedisConnection connection)
        {
            if (masterName.IsEmpty())
            {
                throw new ArgumentNullException("masterName");
            }

            try
            {
                using (var command = new RedisCommand(-1, RedisCommandList.Sentinel, RedisCommandType.SendAndReceive,
                                                      RedisCommandList.Sentinels, masterName.ToBytes()))
                {
                    var raw = command.ExpectArray(connection, false);
                    if (!ReferenceEquals(raw, null))
                    {
                        var rawValue = raw.Value;
                        if (!ReferenceEquals(rawValue, null) && rawValue.Type == RedisRawObjectType.Array)
                        {
                            var sentinelInfos = RedisSentinelNodeInfo.ParseInfoResponse(rawValue);
                            if (sentinelInfos != null)
                            {
                                var length = sentinelInfos.Length;
                                if (length > 0)
                                {
                                    var siblingEndPoints = new List <RedisEndPoint>(length);
                                    for (var i = 0; i < length; i++)
                                    {
                                        var sentinelInfo = sentinelInfos[i];

                                        if (!Disposed && sentinelInfo != null && sentinelInfo.Port.HasValue && !sentinelInfo.IPAddress.IsEmpty())
                                        {
                                            siblingEndPoints.Add(new RedisEndPoint(sentinelInfo.IPAddress, (int)sentinelInfo.Port.Value));
                                        }
                                    }

                                    if (!Disposed)
                                    {
                                        return(new NodeRoleAndSiblings(RedisRole.Sentinel, siblingEndPoints.ToArray()));
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception)
            { }
            return(null);
        }
コード例 #3
0
        public RedisResult <RedisSentinelNodeInfo[]> Sentinels(string masterName)
        {
            if (masterName.IsEmpty())
            {
                throw new ArgumentNullException("masterName");
            }

            var raw = ExpectArray(RedisCommandList.Sentinel, RedisCommandList.Sentinels, masterName.ToBytes());

            if (!ReferenceEquals(raw, null))
            {
                var rawValue = raw.Value;
                if (!ReferenceEquals(rawValue, null) && rawValue.Type == RedisRawObjectType.Array)
                {
                    var items = RedisSentinelNodeInfo.ParseInfoResponse(rawValue);
                    if (!items.IsEmpty())
                    {
                        return(new RedisResult <RedisSentinelNodeInfo[]>(items));
                    }
                }
            }
            return(new RedisResult <RedisSentinelNodeInfo[]>(null));
        }