Skip to content

Commit 511b080

Browse files
committed
feat: 增加缓存
1 parent e15229f commit 511b080

1 file changed

Lines changed: 13 additions & 22 deletions

File tree

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

Lines changed: 13 additions & 22 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 Client, IDataPackageAdapter Adapter), List<Func<ReadOnlyMemory<byte>, ValueTask>>> _callbackCache = [];
54+
private readonly static Dictionary<ITcpSocketClient, List<(IDataPackageAdapter Adapter, Func<ReadOnlyMemory<byte>, ValueTask> Callback)>> _callbackCache = [];
5555

5656
/// <summary>
5757
/// 增加 <see cref="ITcpSocketClient"/> 数据适配器及其对应的回调方法
@@ -61,19 +61,19 @@ 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, adapter), out var list))
64+
if (_callbackCache.TryGetValue(client, out var list))
6565
{
66-
list.Add(cb);
66+
list.Add((adapter, cb));
6767
}
6868
else
6969
{
70-
_callbackCache.Add((client, adapter), [cb]);
70+
_callbackCache.Add(client, [(adapter, cb)]);
7171
}
7272

7373
client.ReceivedCallBack += cb;
7474

7575
// 设置 DataPackageAdapter 的回调函数
76-
adapter.ReceivedCallBack = buffer => callback(buffer);
76+
adapter.ReceivedCallBack = callback;
7777

7878
async ValueTask cb(ReadOnlyMemory<byte> buffer)
7979
{
@@ -86,17 +86,16 @@ async ValueTask cb(ReadOnlyMemory<byte> buffer)
8686
/// 移除 <see cref="ITcpSocketClient"/> 数据适配器及其对应的回调方法
8787
/// </summary>
8888
/// <param name="client"></param>
89-
/// <param name="adapter"></param>
9089
/// <param name="callback"></param>
91-
public static void RemoveDataPackageAdapter(this ITcpSocketClient client, IDataPackageAdapter adapter, Func<ReadOnlyMemory<byte>, ValueTask> callback)
90+
public static void RemoveDataPackageAdapter(this ITcpSocketClient client, Func<ReadOnlyMemory<byte>, ValueTask> callback)
9291
{
93-
if (_callbackCache.TryGetValue((client, adapter), out var list))
92+
if (_callbackCache.TryGetValue(client, out var list))
9493
{
95-
var cbs = list.Where(i => i == callback).ToList();
96-
foreach (var cb in cbs)
94+
var items = list.Where(i => i.Adapter.ReceivedCallBack == callback).ToList();
95+
foreach (var c in items)
9796
{
98-
client.ReceivedCallBack -= cb;
99-
list.Remove(cb);
97+
client.ReceivedCallBack -= c.Callback;
98+
list.Remove(c);
10099
}
101100
}
102101
}
@@ -135,11 +134,7 @@ public static void SetDataPackageAdapter(this ITcpSocketClient client, IDataPack
135134
/// <param name="callback">回调方法</param>
136135
public static void SetDataPackageAdapter(this ITcpSocketClient client, IDataPackageHandler handler, Func<ReadOnlyMemory<byte>, ValueTask> callback)
137136
{
138-
var adapter = new DataPackageAdapter
139-
{
140-
DataPackageHandler = handler
141-
};
142-
client.SetDataPackageAdapter(adapter, callback);
137+
client.SetDataPackageAdapter(new DataPackageAdapter(handler), callback);
143138
}
144139

145140
/// <summary>
@@ -235,11 +230,7 @@ public static void SetDataPackageAdapter<TEntity>(this ITcpSocketClient client,
235230
/// <param name="callback">回调方法</param>
236231
public static void SetDataPackageAdapter<TEntity>(this ITcpSocketClient client, IDataPackageHandler handler, Func<TEntity?, Task> callback)
237232
{
238-
var adapter = new DataPackageAdapter
239-
{
240-
DataPackageHandler = handler
241-
};
242-
client.SetDataPackageAdapter(adapter, callback);
233+
client.SetDataPackageAdapter(new DataPackageAdapter(handler), callback);
243234
}
244235

245236
private static void SetDataAdapterCallback<TEntity>(this IDataPackageAdapter adapter, IDataConverter<TEntity> converter, Func<TEntity?, Task> callback)

0 commit comments

Comments
 (0)