@@ -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