У меня есть библиотека в Lua, которая создает и анализирует пакеты данных для протокола.Когда я отправляю пакет, я ожидаю ответ от получателя, который затем анализируется в таблице.Я пытаюсь написать обертку вокруг этой библиотеки, чтобы я мог выполнить вызов функции, подобный следующему: result = SendUnicast(dest,packetData)
и получить проанализированную таблицу ответов, возвращаемую в результат.
Моя проблема двоякая: 1) входящее сообщение поступает асинхронно и в другом потоке, чем исполняемый скрипт, и 2) следующий полученный мной пакет не обязательно является ответом на мой запрос, я долженанализируем входящий пакет и сопоставляем идентификатор последовательности.
Поток программы в настоящее время выглядит примерно так:
[Поток пользовательского интерфейса C #]
- Нажатие кнопки
- Запуск сценария Lua
- Вызов SendUnicast
- Ожидание ответа
[Поток данных C #]
- Входящее сообщение
- Передать сообщение функции парсера Lua
- , если последовательность соответствует команде ожидания, сохранить проанализированную таблицу, возобновить блокировку
[C #Поток пользовательского интерфейса]
- Lua scipt возвращает проанализированную таблицу
Я не могу найти хороший метод для блокировки выполняемого в данный момент сценария (в UIThread).Создание сопрограммы для вызова, когда сообщение анализируется, а затем while coroutine.status(co) ~= "dead"
, кажется, убивает мой интерпретатор lua.
EDIT
Я отмечаю ответ BMitch как принятыйпотому что это правильный способ справиться с этой проблемой.Однако я предупрежу вас, что LuaInterface не поддерживает сопрограммы, и мне пришлось добавить их поддержку в код C #.