Adapter
SingleInsideAdapter.cs
using FreeRedis.Internal;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace FreeRedis
{
partial clast RedisClient
{
internal clast SingleInsideAdapter : BaseAdapter
{
readonly IRedisSocket _redisSocket;
public SingleInsideAdapter(RedisClient topOwner, RedisClient owner, string host, bool ssl, TimeSpan connectTimeout, TimeSpan receiveTimeout, TimeSpan sendTimeout, Action connected)
{
UseType = UseType.SingleInside;
TopOwner = topOwner;
_redisSocket = new DefaultRedisSocket(host, ssl);
_redisSocket.Connected += (s, e) => connected?.Invoke(owner);
_redisSocket.ConnectTimeout = connectTimeout;
_redisSocket.ReceiveTimeout = receiveTimeout;
_redisSocket.SendTimeout = sendTimeout;
}
public override void Dispose()
{
_redisSocket.Dispose();
}
public override void Refersh(IRedisSocket redisSocket)
{
}
public override IRedisSocket GetRedisSocket(CommandPacket cmd)
{
return DefaultRedisSocket.CreateTempProxy(_redisSocket, null);
}
public override TValue AdapterCall(CommandPacket cmd, Func parse)
{
return TopOwner.LogCall(cmd, () =>
{
_redisSocket.Write(cmd);
var rt = _redisSocket.Read(cmd);
if (cmd._command == "QUIT") _redisSocket.ReleaseSocket();
return parse(rt);
});
}
#if isasync
public override Task AdapterCallAsync(CommandPacket cmd, Func parse)
{
//Single socket not support Async Multiplexing
return Task.FromResult(AdapterCall(cmd, parse));
}
#endif
}
}
}