Skip to content

Commit a0c8444

Browse files
committed
refactor: 增加缓存控制
1 parent f890775 commit a0c8444

1 file changed

Lines changed: 35 additions & 4 deletions

File tree

src/extensions/BootstrapBlazor.TcpSocket/Extensions/ITcpSocketClientExtensions.cs

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public static ValueTask<bool> ConnectAsync(this ITcpSocketClient client, string
5151
return client.ConnectAsync(endPoint, token);
5252
}
5353

54-
private readonly static Dictionary<ITcpSocketClient, List<(IDataPackageAdapter Adapter, Func<ReadOnlyMemory<byte>, ValueTask> Callback)>> _callbackCache = [];
54+
private static readonly Dictionary<ITcpSocketClient, List<(IDataPackageAdapter Adapter, Func<ReadOnlyMemory<byte>, ValueTask> Callback)>> _cache = [];
5555

5656
/// <summary>
5757
/// 增加 <see cref="ITcpSocketClient"/> 数据适配器及其对应的回调方法
@@ -61,13 +61,13 @@ public static ValueTask<bool> ConnectAsync(this ITcpSocketClient client, string
6161
/// <param name="callback"></param>
6262
public static void AddDataPackageAdapter(this ITcpSocketClient client, IDataPackageAdapter adapter, Func<ReadOnlyMemory<byte>, ValueTask> callback)
6363
{
64-
if (_callbackCache.TryGetValue(client, out var list))
64+
if (_cache.TryGetValue(client, out var list))
6565
{
6666
list.Add((adapter, cb));
6767
}
6868
else
6969
{
70-
_callbackCache.Add(client, [(adapter, cb)]);
70+
_cache.Add(client, [(adapter, cb)]);
7171
}
7272

7373
client.ReceivedCallBack += cb;
@@ -89,7 +89,7 @@ async ValueTask cb(ReadOnlyMemory<byte> buffer)
8989
/// <param name="callback"></param>
9090
public static void RemoveDataPackageAdapter(this ITcpSocketClient client, Func<ReadOnlyMemory<byte>, ValueTask> callback)
9191
{
92-
if (_callbackCache.TryGetValue(client, out var list))
92+
if (_cache.TryGetValue(client, out var list))
9393
{
9494
var items = list.Where(i => i.Adapter.ReceivedCallBack == callback).ToList();
9595
foreach (var c in items)
@@ -115,6 +115,17 @@ public static void RemoveDataPackageAdapter(this ITcpSocketClient client, Func<R
115115
/// containing the processed data and returns a <see cref="ValueTask"/>.</param>
116116
public static void SetDataPackageAdapter(this ITcpSocketClient client, IDataPackageAdapter adapter, Func<ReadOnlyMemory<byte>, ValueTask> callback)
117117
{
118+
// 释放缓存
119+
if (_cache.TryGetValue(client, out var list))
120+
{
121+
var items = list.Where(i => i.Callback == callback).ToList();
122+
foreach (var item in items)
123+
{
124+
client.ReceivedCallBack -= item.Callback;
125+
list.Remove(item);
126+
}
127+
}
128+
118129
// 设置 ITcpSocketClient 的回调函数
119130
client.ReceivedCallBack = async buffer =>
120131
{
@@ -151,6 +162,16 @@ public static void SetDataPackageAdapter(this ITcpSocketClient client, IDataPack
151162
/// <param name="callback">The callback function to be invoked with the converted entity.</param>
152163
public static void SetDataPackageAdapter<TEntity>(this ITcpSocketClient client, IDataPackageAdapter adapter, IDataConverter<TEntity> socketDataConverter, Func<TEntity?, Task> callback)
153164
{
165+
// 释放缓存
166+
if (_cache.TryGetValue(client, out var list))
167+
{
168+
foreach (var (Adapter, Callback) in list)
169+
{
170+
client.ReceivedCallBack -= Callback;
171+
}
172+
list.Clear();
173+
}
174+
154175
// 设置 ITcpSocketClient 的回调函数
155176
client.ReceivedCallBack = async buffer =>
156177
{
@@ -185,6 +206,16 @@ public static void SetDataPackageAdapter<TEntity>(this ITcpSocketClient client,
185206
/// <param name="callback">The callback function to invoke with the processed entity of type <typeparamref name="TEntity"/>.</param>
186207
public static void SetDataPackageAdapter<TEntity>(this ITcpSocketClient client, IDataPackageAdapter adapter, Func<TEntity?, Task> callback)
187208
{
209+
// 释放缓存
210+
if (_cache.TryGetValue(client, out var list))
211+
{
212+
foreach (var (Adapter, Callback) in list)
213+
{
214+
client.ReceivedCallBack -= Callback;
215+
}
216+
list.Clear();
217+
}
218+
188219
// 设置 ITcpSocketClient 的回调函数
189220
client.ReceivedCallBack = async buffer =>
190221
{

0 commit comments

Comments
 (0)