1. Serein.Proto.WebSocket项目中,ws方法入参新增了对于使用流程上下文作为参数的识别

This commit is contained in:
fengjiayi
2025-08-23 14:48:19 +08:00
parent 0029bc885e
commit 5656619a3b
7 changed files with 16 additions and 15 deletions

View File

@@ -25,16 +25,7 @@ namespace Serein.Library.Utils
/// <returns>对应的 Channel</returns> /// <returns>对应的 Channel</returns>
private Channel<TriggerResult<object>> GetOrCreateChannel(TSignal signal) private Channel<TriggerResult<object>> GetOrCreateChannel(TSignal signal)
{ {
if(_channels.TryGetValue(signal, out var channel)) return _channels.GetOrAdd(signal, _ => Channel.CreateUnbounded<TriggerResult<object>>());
{
return channel;
}
else
{
channel = Channel.CreateUnbounded<TriggerResult<object>>();
_channels.AddOrUpdate(signal, _ => channel, (s, r) => channel = r);
return channel;
}
} }
/// <summary> /// <summary>

View File

@@ -11,7 +11,7 @@ namespace Serein.Library.Utils
/// <summary> /// <summary>
/// 消息ID生成工具 /// 消息ID生成工具
/// </summary> /// </summary>
public class MessageIdGenerator public class IdGeneratorHelper
{ {
private static readonly object _lock = new object(); private static readonly object _lock = new object();
private static int _counter = 0; private static int _counter = 0;

View File

@@ -56,6 +56,11 @@ namespace Serein.Proto.WebSocket.Handle
/// </summary> /// </summary>
public bool[] UseMsgId { get; set; } = []; public bool[] UseMsgId { get; set; } = [];
/// <summary>
/// 是否使用上下文作为参数
/// </summary>
public bool[] UseContent { get; set; } = [];
/// <summary> /// <summary>
/// 参数名称 /// 参数名称
/// </summary> /// </summary>

View File

@@ -254,6 +254,12 @@ namespace Serein.Proto.WebSocket.Handle
args[i] = data; args[i] = data;
} }
#endregion #endregion
#region
else if (config.UseContent[i])
{
args[i] = context;
}
#endregion
#region #region
else if (config.IsNeedSendDelegate[i]) // 传递SendAsync委托 else if (config.IsNeedSendDelegate[i]) // 传递SendAsync委托
{ {
@@ -308,6 +314,7 @@ namespace Serein.Proto.WebSocket.Handle
} }
} }
#endregion #endregion
} }
if (!isCanInvoke) if (!isCanInvoke)
{ {

View File

@@ -25,9 +25,5 @@
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\Library\Serein.Library.csproj" /> <ProjectReference Include="..\Library\Serein.Library.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Folder Include="Models\" />
</ItemGroup>
</Project> </Project>

View File

@@ -210,6 +210,7 @@ namespace Serein.Proto.WebSocket
UseRequest = parameterInfos.Select(p => p.GetCustomAttribute<UseRequestAttribute>() is not null).ToArray(),// 是否使用整体data数据 UseRequest = parameterInfos.Select(p => p.GetCustomAttribute<UseRequestAttribute>() is not null).ToArray(),// 是否使用整体data数据
UseData = parameterInfos.Select(p => p.GetCustomAttribute<UseDataAttribute>() is not null).ToArray(), // 是否使用整体data数据 UseData = parameterInfos.Select(p => p.GetCustomAttribute<UseDataAttribute>() is not null).ToArray(), // 是否使用整体data数据
UseMsgId = parameterInfos.Select(p => p.GetCustomAttribute<UseMsgIdAttribute>() is not null).ToArray(), // 是否使用消息ID UseMsgId = parameterInfos.Select(p => p.GetCustomAttribute<UseMsgIdAttribute>() is not null).ToArray(), // 是否使用消息ID
UseContent = parameterInfos.Select(p => p.ParameterType.IsAssignableFrom(typeof(WebSocketHandleContext))).ToArray(), // 是否使用上下文
IsNeedSendDelegate = temp_array.Select(p => p.IsNeedSend).ToArray(), // 是否需要发送消息的委托 IsNeedSendDelegate = temp_array.Select(p => p.IsNeedSend).ToArray(), // 是否需要发送消息的委托
SendDelegateType = temp_array.Select(p => p.Type).ToArray(), // 发送消息的委托类型 SendDelegateType = temp_array.Select(p => p.Type).ToArray(), // 发送消息的委托类型
CachedSendDelegates = new Delegate[temp_array.Length], // 提前缓存发送委托数组 CachedSendDelegates = new Delegate[temp_array.Length], // 提前缓存发送委托数组

View File

@@ -69,6 +69,7 @@
<ProjectReference Include="..\Library\Serein.Library.csproj" /> <ProjectReference Include="..\Library\Serein.Library.csproj" />
<ProjectReference Include="..\NodeFlow\Serein.NodeFlow.csproj" /> <ProjectReference Include="..\NodeFlow\Serein.NodeFlow.csproj" />
<ProjectReference Include="..\Serein.Extend.NewtonsoftJson\Serein.Extend.NewtonsoftJson.csproj" /> <ProjectReference Include="..\Serein.Extend.NewtonsoftJson\Serein.Extend.NewtonsoftJson.csproj" />
<ProjectReference Include="..\Serein.Proto.Modbus\Serein.Proto.Modbus.csproj" />
<ProjectReference Include="..\Serein.Script\Serein.Script.csproj" /> <ProjectReference Include="..\Serein.Script\Serein.Script.csproj" />
</ItemGroup> </ItemGroup>