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); }
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); } } }
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); } } }
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" }); }