diff --git a/Library/Utils/FlowTrigger/ChannelFlowTrigger.cs b/Library/Utils/FlowTrigger/ChannelFlowTrigger.cs
index a3a3ba9..9e31180 100644
--- a/Library/Utils/FlowTrigger/ChannelFlowTrigger.cs
+++ b/Library/Utils/FlowTrigger/ChannelFlowTrigger.cs
@@ -25,16 +25,7 @@ namespace Serein.Library.Utils
/// 对应的 Channel
private Channel> GetOrCreateChannel(TSignal signal)
{
- if(_channels.TryGetValue(signal, out var channel))
- {
- return channel;
- }
- else
- {
- channel = Channel.CreateUnbounded>();
- _channels.AddOrUpdate(signal, _ => channel, (s, r) => channel = r);
- return channel;
- }
+ return _channels.GetOrAdd(signal, _ => Channel.CreateUnbounded>());
}
///
diff --git a/Library/Utils/MessageIdGenerator.cs b/Library/Utils/IdGeneratorHelper.cs
similarity index 97%
rename from Library/Utils/MessageIdGenerator.cs
rename to Library/Utils/IdGeneratorHelper.cs
index f1f11b2..5470388 100644
--- a/Library/Utils/MessageIdGenerator.cs
+++ b/Library/Utils/IdGeneratorHelper.cs
@@ -11,7 +11,7 @@ namespace Serein.Library.Utils
///
/// 消息ID生成工具
///
- public class MessageIdGenerator
+ public class IdGeneratorHelper
{
private static readonly object _lock = new object();
private static int _counter = 0;
diff --git a/Serein.Proto.WebSocket/Handle/MethodInvokeConfiguration.cs b/Serein.Proto.WebSocket/Handle/MethodInvokeConfiguration.cs
index a1105a3..cc612f5 100644
--- a/Serein.Proto.WebSocket/Handle/MethodInvokeConfiguration.cs
+++ b/Serein.Proto.WebSocket/Handle/MethodInvokeConfiguration.cs
@@ -56,6 +56,11 @@ namespace Serein.Proto.WebSocket.Handle
///
public bool[] UseMsgId { get; set; } = [];
+ ///
+ /// 是否使用上下文作为参数
+ ///
+ public bool[] UseContent { get; set; } = [];
+
///
/// 参数名称
///
diff --git a/Serein.Proto.WebSocket/Handle/WebSocketHandleModule.cs b/Serein.Proto.WebSocket/Handle/WebSocketHandleModule.cs
index cd5cbb4..9d6c92a 100644
--- a/Serein.Proto.WebSocket/Handle/WebSocketHandleModule.cs
+++ b/Serein.Proto.WebSocket/Handle/WebSocketHandleModule.cs
@@ -254,6 +254,12 @@ namespace Serein.Proto.WebSocket.Handle
args[i] = data;
}
#endregion
+ #region 传递上下文
+ else if (config.UseContent[i])
+ {
+ args[i] = context;
+ }
+ #endregion
#region 传递消息委托
else if (config.IsNeedSendDelegate[i]) // 传递SendAsync委托
{
@@ -308,6 +314,7 @@ namespace Serein.Proto.WebSocket.Handle
}
}
#endregion
+
}
if (!isCanInvoke)
{
diff --git a/Serein.Proto.WebSocket/Serein.Proto.WebSocket.csproj b/Serein.Proto.WebSocket/Serein.Proto.WebSocket.csproj
index 18dee7d..7c67d79 100644
--- a/Serein.Proto.WebSocket/Serein.Proto.WebSocket.csproj
+++ b/Serein.Proto.WebSocket/Serein.Proto.WebSocket.csproj
@@ -25,9 +25,5 @@
-
-
-
-
diff --git a/Serein.Proto.WebSocket/SereinWebSocketService.cs b/Serein.Proto.WebSocket/SereinWebSocketService.cs
index bb0cb95..e433627 100644
--- a/Serein.Proto.WebSocket/SereinWebSocketService.cs
+++ b/Serein.Proto.WebSocket/SereinWebSocketService.cs
@@ -210,6 +210,7 @@ namespace Serein.Proto.WebSocket
UseRequest = parameterInfos.Select(p => p.GetCustomAttribute() is not null).ToArray(),// 是否使用整体data数据
UseData = parameterInfos.Select(p => p.GetCustomAttribute() is not null).ToArray(), // 是否使用整体data数据
UseMsgId = parameterInfos.Select(p => p.GetCustomAttribute() is not null).ToArray(), // 是否使用消息ID
+ UseContent = parameterInfos.Select(p => p.ParameterType.IsAssignableFrom(typeof(WebSocketHandleContext))).ToArray(), // 是否使用上下文
IsNeedSendDelegate = temp_array.Select(p => p.IsNeedSend).ToArray(), // 是否需要发送消息的委托
SendDelegateType = temp_array.Select(p => p.Type).ToArray(), // 发送消息的委托类型
CachedSendDelegates = new Delegate[temp_array.Length], // 提前缓存发送委托数组
diff --git a/Workbench/Serein.WorkBench.csproj b/Workbench/Serein.WorkBench.csproj
index 21e22fc..0887490 100644
--- a/Workbench/Serein.WorkBench.csproj
+++ b/Workbench/Serein.WorkBench.csproj
@@ -69,6 +69,7 @@
+