} // 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); }
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); }
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)); }