public static RedisResult <RedisGeoRadiusResult[]> ToGeoRadiusArray(RedisRaw array) { if (array == null) { return(new RedisResult <RedisGeoRadiusResult[]>(new RedisGeoRadiusResult[0])); } var value = array.Value; if (value == null || value.Type != RedisRawObjectType.Array) { return(new RedisResult <RedisGeoRadiusResult[]>(new RedisGeoRadiusResult[0])); } var items = value.Items; if (items == null) { return(new RedisResult <RedisGeoRadiusResult[]>(new RedisGeoRadiusResult[0])); } var count = items.Count; if (count == 0) { return(new RedisResult <RedisGeoRadiusResult[]>(new RedisGeoRadiusResult[0])); } var list = new List <RedisGeoRadiusResult>(count); for (var i = 0; i < count; i++) { list.Add(ToGeoRadiusResult(items[i])); } return(new RedisResult <RedisGeoRadiusResult[]>(list.ToArray())); }
public static RedisScanBytes ToScanBytes(RedisRaw array) { if (array == null) { return(new RedisScanBytes(null)); } var value = array.Value; if (value == null) { return(new RedisScanBytes(null)); } var items = value.Items; if (items == null) { return(new RedisScanBytes(null)); } var count = items.Count; if (count == 0) { return(new RedisScanBytes(null)); } var item = items[0]; if (item == null) { return(new RedisScanBytes(null)); } if (item.Type != RedisRawObjectType.BulkString) { throw new RedisException("Invalid scan cursor type"); } var data = item.Data; if (data == null || !(data is string)) { throw new RedisException("Invalid scan cursor type"); } var str = data as string; if (str.IsEmpty()) { throw new RedisException("Invalid scan cursor type"); } var cursor = ulong.Parse(str); var result = (RedisByteArray[])null; if (items.Count > 1) { item = items[1]; if (item != null) { if (item.Type != RedisRawObjectType.Array) { throw new RedisException("Invalid scan result type"); } var subItems = item.Items; if (subItems != null) { var subCount = subItems.Count; if (subCount > 0) { var list = new List <RedisByteArray>(subCount); for (var i = 0; i < count; i++) { var subItem = subItems[i]; if (subItem == null || subItem.Type != RedisRawObjectType.BulkString) { throw new RedisException("Invalid scan result item type"); } list.Add(subItem.Data as byte[]); } result = list.ToArray(); } } } } return(new RedisScanBytes(new RedisScanBytesData(cursor, result))); }
public virtual bool ProcessResult(RedisRawObject rawObj) { if (!ReferenceEquals(rawObj, null)) { var data = rawObj.Data; switch (Expectation) { case RedisCommandExpect.BulkString: { var str = ReferenceEquals(data, null) ? null : (data is byte[] ? ((byte[])data).ToUTF8String() : data.ToString()); RedisString result = str; SetResult(str); } return(true); case RedisCommandExpect.BulkStringBytes: { var bytes = ReferenceEquals(data, null) ? null : (data is byte[] ? (byte[])data : data.ToBytes()); RedisBytes result = bytes; SetResult(result); } return(true); case RedisCommandExpect.SimpleString: { var str = ReferenceEquals(data, null) ? null : (data is string?(string)data : data.ToString()); if (m_OKIf.IsEmpty()) { RedisString result = str; SetResult(result); } else { RedisBool result = m_OKIf == str; SetResult(result); } } return(true); case RedisCommandExpect.SimpleStringBytes: { var str = ReferenceEquals(data, null) ? null : (data is string?(string)data : data.ToString()); if (m_OKIf.IsEmpty()) { RedisBytes result = str.ToBytes(); SetResult(result); } else { RedisBool result = m_OKIf == str; SetResult(result); } } return(true); case RedisCommandExpect.OK: { RedisBool result = RedisConstants.OK.Equals(data); SetResult(result); } return(true); case RedisCommandExpect.One: { RedisBool result = RedisConstants.One.Equals(data); SetResult(result); } return(true); case RedisCommandExpect.GreaterThanZero: { RedisBool result = RedisConstants.Zero.CompareTo(data) == -1; SetResult(result); } return(true); case RedisCommandExpect.Nothing: SetResult(RedisVoidVal.Value); return(true); case RedisCommandExpect.Response: case RedisCommandExpect.Array: { var response = data as RedisRawObject; var result = new RedisRaw(response); SetResult(result); } return(true); case RedisCommandExpect.Double: { RedisDouble result = (double)data; SetResult(result); } return(true); case RedisCommandExpect.Integer: { if (data is long) { RedisInteger result = (long)data; SetResult(result); } else { RedisInteger result = (int)data; SetResult(result); } } return(true); case RedisCommandExpect.MultiDataBytes: { var bytes = data as byte[][]; RedisMultiBytes result = bytes; SetResult(result); } return(true); case RedisCommandExpect.MultiDataStrings: { var strings = data as string[]; RedisMultiString result = strings; SetResult(result); } return(true); case RedisCommandExpect.NullableDouble: { if (data is double) { RedisNullableDouble result = (double)data; SetResult(result); } else if (data is double?) { RedisNullableDouble result = (double?)data; SetResult(result); } else { var result = new RedisNullableDouble(null); SetResult(result); } } return(true); case RedisCommandExpect.NullableInteger: { if (data is long) { RedisNullableInteger result = (long)data; SetResult(result); } else if (data is long?) { RedisNullableInteger result = (long?)data; SetResult(result); } else if (data is int) { RedisNullableInteger result = (int)data; SetResult(result); } else if (data is int?) { RedisNullableInteger result = (int?)data; SetResult(result); } else { var result = new RedisNullableInteger(null); SetResult(result); } } return(true); default: SetResult(data); return(true); } } return(false); }