コード例 #1
0
        public async Task <Result> Execute(Command cmd, params Type[] types)
        {
            var host = cmd.Read ? Host.GetReadHost() : Host.GetWriteHost();

            if (host == null)
            {
                return(new Result()
                {
                    ResultType = ResultType.NetError, Messge = "redis server is not available"
                });
            }
            var client = await host.Pop();

            if (client == null)
            {
                return new Result()
                       {
                           ResultType = ResultType.NetError, Messge = "exceeding maximum number of connections"
                       }
            }
            ;
            var result = host.Connect(client);

            if (result.IsError)
            {
                host.Push(client);

                return(result);
            }
            RedisRequest request = new RedisRequest(host, client, cmd, types);

            result = await request.Execute();

            return(result);
        }
コード例 #2
0
        public async Task <Result> Execute(Command cmd, params Type[] types)
        {
            var host = cmd.Read ? Host.GetReadHost() : Host.GetWriteHost();

            if (host == null)
            {
                return(new Result()
                {
                    ResultType = ResultType.NetError, Messge = "redis server is not available"
                });
            }
            var client = await host.Pop();

            if (client == null)
            {
                return new Result()
                       {
                           ResultType = ResultType.NetError, Messge = "exceeding maximum number of connections"
                       }
            }
            ;
            try
            {
                var result = host.Connect(client);

                if (result.IsError)
                {
                    return(result);
                }
                using (var tarck = CodeTrackFactory.Track(cmd.Name, CodeTrackLevel.Module, null, "Redis", client.Host))
                {
                    if (tarck.Enabled)
                    {
                        tarck.Activity?.AddTag("tag", "BeetleX Redis");
                    }
                    cmd.Activity = tarck.Activity;
                    RedisRequest request = new RedisRequest(host, client, cmd, types);
                    request.Activity = tarck.Activity;
                    result           = await request.Execute();

                    return(result);
                }
            }
            finally
            {
                if (client != null)
                {
                    host.Push(client);
                }
            }
        }
コード例 #3
0
ファイル: RedisHost.cs プロジェクト: zakailynn/BeetleX.Redis
 public async void Ping()
 {
     if (System.Threading.Interlocked.CompareExchange(ref mPingStatus, 1, 0) == 0)
     {
         try
         {
             Connect(mPingClient);
             Commands.PING ping    = new Commands.PING(null);
             var           request = new RedisRequest(null, mPingClient, ping, typeof(string));
             var           result  = await request.Execute();
         }
         catch
         {
         }
         finally
         {
             System.Threading.Interlocked.Exchange(ref mPingStatus, 0);
         }
     }
 }
コード例 #4
0
ファイル: RedisHost.cs プロジェクト: zakailynn/BeetleX.Redis
        public Result Connect(RedisClient client)
        {
            if (!client.TcpClient.IsConnected)
            {
                bool isNew;
                if (client.TcpClient.Connect(out isNew))
                {
                    this.Available = true;
                    if (!string.IsNullOrEmpty(Password))
                    {
                        Commands.AUTH auth    = new Commands.AUTH(Password);
                        RedisRequest  request = new RedisRequest(null, client, auth, typeof(string));
                        var           task    = request.Execute();
                        task.Wait();
                        if (task.Result.ResultType == ResultType.DataError ||
                            task.Result.ResultType == ResultType.Error ||
                            task.Result.ResultType == ResultType.NetError)
                        {
                            return(task.Result);
                        }
                    }

                    Commands.SELECT select = new Commands.SELECT(DB);
                    var             req    = new RedisRequest(null, client, select, typeof(string));
                    var             t      = req.Execute();
                    t.Wait();
                    return(t.Result);
                }
                else
                {
                    this.Available = false;
                    return(new Result {
                        ResultType = ResultType.NetError, Messge = client.TcpClient.LastError.Message
                    });
                }
            }
            return(new Result {
                ResultType = ResultType.Simple, Messge = "Connected"
            });
        }