websocket消息处理子程序应能使用子程序内的子程序

功能建议 · 890 次浏览
浅沧 创建于 14天9小时前

目前使用websocket模块连接到websocket服务时只能指定动作的直接子程序。

我将websocket连接,发送消息等步骤弄成了一个公共子程序以便复用,然后在公共子程序内定义了一个消息处理子程序sub,在连接到websocket时指定了使用sub,但是运行动作后sub并没有并调用。

从自己复用以及分享子程序的角度看,将消息处理子程序打包在websocket子程序内是合理的,希望能增加这个功能。

浅沧 最后更新于 2024/9/5

回复内容
CL 14天9小时前
#1

调用报错了么?看下quicker.log里有没有相关的记录。

浅沧 回复 CL 14天4小时前 :

2024-09-05 15:22:56,309 [action:思源笔记websocket] INFO Quicker.Domain.AppServer - 执行动作:思源笔记websocket id=002bc84f-2cfb-4686-bdb9-15dd76640613

2024-09-05 15:22:56,323 [53] WARN RuWb3AbQCUrwpLLrAby.W06BVybaWpt1NXQUBRp - 处理Websocket消息出错:无法找到子程序:onmessage

System.InvalidOperationException: 无法找到子程序:onmessage

   在 Quicker.Domain.Actions.X.SubPrograms.SubProgramHelper.<RunStandaloneSubprogram>d__18.MoveNext()

--- 引发异常的上一位置中堆栈跟踪的末尾 ---

   在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()

   在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)

   在 Quicker.Domain.Actions.ActionExecuteContext.RunSp(String spName, IDictionary`2 inputParams)

   在 Quicker.Domain.AppServer.ExecuteActionSubProgram(String actionIdOrNameOrTempplateId, String spName, IDictionary`2 inputParams, ActionExtraContextData actionExtraContextData, Nullable`1 cts)

   在 RuWb3AbQCUrwpLLrAby.W06BVybaWpt1NXQUBRp.XUcZFYotCs(Object  , MessageEventArgs  )


CL 回复 浅沧 14天4小时前 :

这个是不支持的,需要是主程序自身的子程序。可以在这个子程序里调用公共子程序。

浅沧 回复 CL 14天3小时前 :

消息处理和主程序是独立运行的,我觉得不必要把消息处理程序限定在主程序的子程序吧,公共子程序的子程序应该也行啊,只要调用的时候能找到不就好了吗。公共子程序和动作勉强可以说是平级吧~

CL 回复 浅沧 14天3小时前 :

这是由设计决定的,在定义回调的时候,得到的是动作id和子程序标识,所以当有消息的时候,只能找到动作和动作里的子程序,找不到共享子程序。所以,可以把主要逻辑封装到共享子程序里,然后在动作的子程序里调用这个共享的子程序。

浅沧 回复 CL 14天2小时前 :

我自用是够了,就是不好分享为子程序了,需要用户再手动定义一个子程序,相对麻烦一点

回复主贴