Esempio n. 1
0
        protected override void LRange(int database, RedisKey key, long start, Span <TypedRedisValue> arr)
        {
            var stack = GetStack(key, false);

            using (var iter = stack.GetEnumerator())
            {
                // skip
                while (start-- > 0)
                {
                    if (!iter.MoveNext())
                    {
                        ThrowArgumentOutOfRangeException();
                    }
                }

                // take
                for (int i = 0; i < arr.Length; i++)
                {
                    if (!iter.MoveNext())
                    {
                        ThrowArgumentOutOfRangeException();
                    }
                    arr[i] = TypedRedisValue.BulkString(iter.Current);
                }
            }
        }
        protected virtual TypedRedisValue Rpush(RedisClient client, RedisRequest request)
        {
            var  key    = request.GetKey(1);
            long length = -1;

            for (int i = 2; i < request.Count; i++)
            {
                length = Rpush(client.Database, key, request.GetValue(i));
            }
            return(TypedRedisValue.Integer(length));
        }
        protected virtual TypedRedisValue Srem(RedisClient client, RedisRequest request)
        {
            int removed = 0;
            var key     = request.GetKey(1);

            for (int i = 2; i < request.Count; i++)
            {
                if (Srem(client.Database, key, request.GetValue(i)))
                {
                    removed++;
                }
            }
            return(TypedRedisValue.Integer(removed));
        }
        protected virtual TypedRedisValue LRange(RedisClient client, RedisRequest request)
        {
            var  key = request.GetKey(1);
            long start = request.GetInt64(2), stop = request.GetInt64(3);

            var len = Llen(client.Database, key);

            if (len == 0)
            {
                return(TypedRedisValue.EmptyArray);
            }

            if (start < 0)
            {
                start = len + start;
            }
            if (stop < 0)
            {
                stop = len + stop;
            }

            if (stop < 0 || start >= len || stop < start)
            {
                return(TypedRedisValue.EmptyArray);
            }

            if (start < 0)
            {
                start = 0;
            }
            else if (start >= len)
            {
                start = len - 1;
            }

            if (stop < 0)
            {
                stop = 0;
            }
            else if (stop >= len)
            {
                stop = len - 1;
            }

            var arr = TypedRedisValue.Rent(checked ((int)((stop - start) + 1)), out var span);

            LRange(client.Database, key, start, span);
            return(arr);
        }
 protected virtual TypedRedisValue ClientReply(RedisClient client, RedisRequest request)
 {
     if (request.IsString(2, "on"))
     {
         client.SkipReplies = -1;                            // reply to nothing
     }
     else if (request.IsString(2, "off"))
     {
         client.SkipReplies = 0;                                  // reply to everything
     }
     else if (request.IsString(2, "skip"))
     {
         client.SkipReplies = 2;                                   // this one, and the next one
     }
     else
     {
         return(TypedRedisValue.Error("ERR syntax error"));
     }
     return(TypedRedisValue.OK);
 }
 protected virtual TypedRedisValue Scard(RedisClient client, RedisRequest request)
 => TypedRedisValue.Integer(Scard(client.Database, request.GetKey(1)));
 protected virtual TypedRedisValue Spop(RedisClient client, RedisRequest request)
 => TypedRedisValue.BulkString(Spop(client.Database, request.GetKey(1)));
 protected virtual TypedRedisValue ClientGetname(RedisClient client, RedisRequest request)
 => TypedRedisValue.BulkString(client.Name);
 public TypedRedisValue UnknownSubcommandOrArgumentCount() => TypedRedisValue.Error($"ERR Unknown subcommand or wrong number of arguments for '{ToString()}'.");
Esempio n. 10
0
 public TypedRedisValue CommandNotFound()
 => TypedRedisValue.Error($"ERR unknown command '{ToString()}'");
Esempio n. 11
0
 public TypedRedisValue WrongArgCount() => TypedRedisValue.Error($"ERR wrong number of arguments for '{ToString()}' command");