我在 Lua 中有一个库,可以为协议创建和解析数据包。当我发送一个数据包时,我期待来自目的地的回复,然后将其解析成一个表。我正在尝试围绕这个库编写一个包装器,以便我可以进行如下的函数调用:result = SendUnicast(dest,packetData)
并将解析的响应表返回给结果。
我的问题有两个:1)传入的消息是异步传入的,并且在与执行脚本不同的线程上,2)我收到的下一个数据包不一定是我的请求的响应,我必须解析传入的数据包并匹配一个序列号。
程序流程目前看起来像:
[C# UI 线程]
- 按钮点击
- 运行 Lua 脚本
- 调用发送单播
- 等待响应
[C#数据线程]
- 传入消息
- 将消息传递给 Lua 解析器函数
- 如果序列匹配等待命令,存储解析表,恢复阻塞
[C# UI 线程]
- Lua scipt 返回解析后的表
我似乎找不到阻止当前正在执行的脚本(在 UIThread 中)的好方法。创建一个在解析消息时要调用的协程,然后while coroutine.status(co) ~= "dead"
似乎会杀死我的 lua 解释器。
编辑
我将 BMitch 的答案标记为已接受,因为它是处理此问题的正确方法。然而,我会警告你,LuaInterface 不支持协程,我必须自己在 C# 代码中添加对协程的支持。