Exemplo n.º 1
0
        public ResponseData DoClusterSetSlot(RequestType type, string action, int slot, string nodeID)
        {
            lock (_syncLocker)
            {
                List <string> list = new List <string>();

                var arr = type.ToString().Split("_");

                list.AddRange(arr);

                list.Add(slot.ToString());

                list.Add(action);

                list.Add(nodeID);

                RedisCoder.RequestOnlyParams(list.ToArray());

                var result = RedisCoder.Decoder(type);

                if (result.Type == ResponseType.Redirect)
                {
                    return((ResponseData)OnRedirect.Invoke(result.Data, OperationType.DoClusterSetSlot, type, action, slot, nodeID));
                }
                else if (result.Type == ResponseType.Error)
                {
                    throw new Exception(result.Data);
                }
                else
                {
                    return(result);
                }
            }
        }
Exemplo n.º 2
0
        public ResponseData DoMutiCmd(RequestType type, params object[] @params)
        {
            lock (_syncLocker)
            {
                List <string> list = new List <string>();

                var arr = type.ToString().Split("_");

                list.AddRange(arr);

                if (@params != null)
                {
                    foreach (var item in @params)
                    {
                        list.Add(item.ToString());
                    }
                }
                RedisCoder.RequestOnlyParams(list.ToArray());
                var result = RedisCoder.Decoder(type);
                if (result.Type == ResponseType.Redirect)
                {
                    return((ResponseData)OnRedirect.Invoke(result.Data, OperationType.DoCluster, type, @params));
                }
                else if (result.Type == ResponseType.Error)
                {
                    throw new Exception(result.Data);
                }
                else
                {
                    return(result);
                }
            }
        }
Exemplo n.º 3
0
        public ResponseData <string> DoMutiCmd(RequestType type, params object[] @params)
        {
            ResponseData <string> result = new ResponseData <string>()
            {
                Type = ResponseType.Empty, Data = "未知的命令"
            };

            try
            {
                lock (SyncRoot)
                {
                    using (var cts = new CancellationTokenSource(_actionTimeout))
                    {
                        List <string> list = new List <string>();

                        var arr = type.ToString().Split("_");

                        list.AddRange(arr);

                        if (@params != null)
                        {
                            foreach (var item in @params)
                            {
                                list.Add(item.ToString());
                            }
                        }

                        RedisCoder.RequestOnlyParams(list.ToArray());

                        var sresult = RedisCoder.Decoder <string>(type, cts.Token);

                        if (sresult != null && sresult.Type == ResponseType.Redirect)
                        {
                            return((ResponseData <string>)OnRedirect.Invoke(sresult.Data, OperationType.DoCluster, type, @params));
                        }
                        else if (sresult.Type == ResponseType.Error)
                        {
                            throw new Exception(sresult.Data);
                        }
                        else
                        {
                            return(sresult);
                        }
                    }
                }
            }
            catch (TaskCanceledException tex)
            {
                result.Type = ResponseType.Error;
                result.Data = "Action Timeout";
            }
            catch (Exception ex)
            {
                result.Type = ResponseType.Error;
                result.Data = ex.Message;
            }
            return(result);
        }
Exemplo n.º 4
0
        public ResponseData DoClusterSetSlot(RequestType type, string action, int slot, string nodeID)
        {
            ResponseData result = new ResponseData()
            {
                Type = ResponseType.Empty, Data = "未知的命令"
            };

            try
            {
                result = TaskHelper.Run((token) =>
                {
                    lock (SyncRoot)
                    {
                        List <string> list = new List <string>();

                        var arr = type.ToString().Split("_");

                        list.AddRange(arr);

                        list.Add(slot.ToString());

                        list.Add(action);

                        list.Add(nodeID);

                        RedisCoder.RequestOnlyParams(list.ToArray());

                        var sresult = RedisCoder.Decoder(type, token);

                        if (sresult != null && sresult.Type == ResponseType.Redirect)
                        {
                            return((ResponseData)OnRedirect.Invoke(sresult.Data, OperationType.DoClusterSetSlot, type, action, slot, nodeID));
                        }
                        else if (sresult != null && sresult.Type == ResponseType.Error)
                        {
                            throw new Exception(sresult.Data);
                        }
                        else
                        {
                            return(sresult);
                        }
                    }
                }, _actionTimeout).Result;
            }
            catch (TaskCanceledException tex)
            {
                result.Type = ResponseType.Error;
                result.Data = "Action Timeout";
            }
            catch (Exception ex)
            {
                result.Type = ResponseType.Error;
                result.Data = ex.Message;
            }
            return(result);
        }
Exemplo n.º 5
0
        /// <summary>
        /// 发送,
        /// 命令行模式
        /// </summary>
        /// <param name="cmd"></param>
        /// <returns></returns>
        internal ResponseData RequestWithConsole(string cmd)
        {
            lock (_syncLocker)
            {
                ResponseData result = new ResponseData()
                {
                    Type = ResponseType.Empty, Data = "未知的命令"
                };
                try
                {
                    if (!string.IsNullOrWhiteSpace(cmd))
                    {
                        var @params = cmd.Split(" ", StringSplitOptions.RemoveEmptyEntries);

                        if (@params != null && @params.Length > 0)
                        {
                            var redisCmd = @params[0].ToUpper();

                            if (EnumHelper.GetEnum(redisCmd, out RequestType requestType1))
                            {
                                RedisCoder.RequestOnlyParams(@params);
                                result = RedisCoder.Decoder(requestType1);
                            }
                            else
                            {
                                redisCmd = $"{@params[0]}_{@params[1]}".ToUpper();

                                if (EnumHelper.GetEnum(redisCmd, out RequestType requestType2))
                                {
                                    RedisCoder.RequestOnlyParams(@params);
                                    result = RedisCoder.Decoder(requestType2);
                                }
                                else
                                {
                                    result.Type = ResponseType.Error;
                                    result.Data = "未知的命令 cmd:" + cmd;
                                }
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    result.Type = ResponseType.Error;
                    result.Data = ex.Message;
                }
                return(result);
            }
        }
Exemplo n.º 6
0
 /// <summary>
 /// 发送命令
 /// </summary>
 /// <param name="cmd"></param>
 public ResponseData Do(RequestType type)
 {
     lock (_syncLocker)
     {
         RedisCoder.RequestOnlyParams(type.ToString());
         var result = RedisCoder.Decoder(type);
         if (result.Type == ResponseType.Redirect)
         {
             return((ResponseData)OnRedirect.Invoke(result.Data, OperationType.Do, null));
         }
         else
         {
             return(result);
         }
     }
 }
Exemplo n.º 7
0
        public ResponseData DoBatchWithIDKeys(RequestType type, string id, params string[] keys)
        {
            id.KeyCheck();
            keys.KeyCheck();

            ResponseData result = new ResponseData()
            {
                Type = ResponseType.Empty, Data = "未知的命令"
            };

            try
            {
                result = TaskHelper.Run((token) =>
                {
                    lock (SyncRoot)
                    {
                        List <string> list = new List <string>();
                        list.Add(type.ToString());
                        list.Add(id);
                        list.AddRange(keys);
                        RedisCoder.RequestOnlyParams(list.ToArray());
                        var sresult = RedisCoder.Decoder(type, token);
                        if (sresult != null && sresult.Type == ResponseType.Redirect)
                        {
                            return((ResponseData)OnRedirect.Invoke(sresult.Data, OperationType.DoBatchWithIDKeys, type, id, keys));
                        }
                        else
                        {
                            return(sresult);
                        }
                    }
                }, _actionTimeout).Result;
            }
            catch (TaskCanceledException tex)
            {
                result.Type = ResponseType.Error;
                result.Data = "Action Timeout";
            }
            catch (Exception ex)
            {
                result.Type = ResponseType.Error;
                result.Data = ex.Message;
            }
            return(result);
        }
Exemplo n.º 8
0
        /// <summary>
        /// 发送命令
        /// </summary>
        /// <param name="cmd"></param>
        public ResponseData Do(RequestType type)
        {
            ResponseData result = new ResponseData()
            {
                Type = ResponseType.Empty, Data = "未知的命令"
            };

            try
            {
                result = TaskHelper.Run((token) =>
                {
                    lock (SyncRoot)
                    {
                        RedisCoder.RequestOnlyParams(type.ToString());
                        var sresult = RedisCoder.Decoder(type, token);
                        if (sresult != null && sresult.Type == ResponseType.Redirect)
                        {
                            return((ResponseData)OnRedirect.Invoke(sresult.Data, OperationType.Do, null));
                        }
                        else
                        {
                            return(sresult);
                        }
                    }
                }, _actionTimeout).Result;
            }
            catch (TaskCanceledException tex)
            {
                result.Type = ResponseType.Error;
                result.Data = "Action Timeout," + tex.Message;
            }
            catch (Exception ex)
            {
                result.Type = ResponseType.Error;
                result.Data = ex.Message;
            }
            return(result);
        }
Exemplo n.º 9
0
        /// <summary>
        /// 发送命令
        /// </summary>
        /// <param name="cmd"></param>
        public ResponseData <string> Do(RequestType type)
        {
            ResponseData <string> result = new ResponseData <string>()
            {
                Type = ResponseType.Empty, Data = "未知的命令"
            };

            try
            {
                lock (SyncRoot)
                {
                    using (var cts = new CancellationTokenSource(_actionTimeout))
                    {
                        RedisCoder.RequestOnlyParams(type.ToString());
                        var sresult = RedisCoder.Decoder <string>(type, cts.Token);
                        if (sresult != null && sresult.Type == ResponseType.Redirect)
                        {
                            return((ResponseData <string>)OnRedirect.Invoke(sresult.Data, OperationType.Do, null));
                        }
                        else
                        {
                            return(sresult);
                        }
                    }
                }
            }
            catch (TaskCanceledException tex)
            {
                result.Type = ResponseType.Error;
                result.Data = "Action Timeout," + tex.Message;
            }
            catch (Exception ex)
            {
                result.Type = ResponseType.Error;
                result.Data = ex.Message;
            }
            return(result);
        }
Exemplo n.º 10
0
        public ResponseData DoBatchWithIDKeys(RequestType type, string id, params string[] keys)
        {
            lock (_syncLocker)
            {
                id.KeyCheck();
                keys.KeyCheck();

                List <string> list = new List <string>();
                list.Add(type.ToString());
                list.Add(id);
                list.AddRange(keys);
                RedisCoder.RequestOnlyParams(list.ToArray());
                var result = RedisCoder.Decoder(type);
                if (result.Type == ResponseType.Redirect)
                {
                    return((ResponseData)OnRedirect.Invoke(result.Data, OperationType.DoBatchWithIDKeys, type, id, keys));
                }
                else
                {
                    return(result);
                }
            }
        }
Exemplo n.º 11
0
        /// <summary>
        /// 发送,
        /// 命令行模式
        /// </summary>
        /// <param name="cmd"></param>
        /// <returns></returns>
        internal ResponseData RequestWithConsole(string cmd)
        {
            ResponseData result = new ResponseData()
            {
                Type = ResponseType.Empty, Data = "未知的命令"
            };

            try
            {
                result = TaskHelper.Run((token) =>
                {
                    lock (SyncRoot)
                    {
                        ResponseData sresult = new ResponseData()
                        {
                            Type = ResponseType.Empty, Data = "未知的命令"
                        };

                        if (!string.IsNullOrWhiteSpace(cmd))
                        {
                            var @params = cmd.Split(" ", StringSplitOptions.RemoveEmptyEntries);

                            if (@params != null && @params.Length > 0)
                            {
                                var redisCmd = @params[0].ToUpper();

                                if (EnumHelper.GetEnum(redisCmd, out RequestType requestType1))
                                {
                                    RedisCoder.RequestOnlyParams(@params);
                                    sresult = RedisCoder.Decoder(requestType1, token);
                                }
                                else
                                {
                                    redisCmd = $"{@params[0]}_{@params[1]}".ToUpper();

                                    if (EnumHelper.GetEnum(redisCmd, out RequestType requestType2))
                                    {
                                        RedisCoder.RequestOnlyParams(@params);
                                        sresult = RedisCoder.Decoder(requestType2, token);
                                    }
                                    else
                                    {
                                        sresult.Type = ResponseType.Error;
                                        sresult.Data = "未知的命令 cmd:" + cmd;
                                    }
                                }
                            }
                        }
                        return(sresult);
                    }
                }, _actionTimeout).Result;
            }
            catch (TaskCanceledException tex)
            {
                result.Type = ResponseType.Error;
                result.Data = "Action Timeout";
            }
            catch (Exception ex)
            {
                result.Type = ResponseType.Error;
                result.Data = ex.Message;
            }
            return(result);
        }