Ejemplo n.º 1
0
        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()));
        }
Ejemplo n.º 2
0
        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)));
        }
Ejemplo n.º 3
0
        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);
        }