プロトコルのデータ パケットを作成および解析するライブラリが Lua にあります。パケットを送信すると、宛先からの返信が返されることを期待しています。返信はテーブルに解析されます。次のような関数呼び出しを行うことができるように、このライブラリの周りにラッパーを書き込もうとしています:result = SendUnicast(dest,packetData)
解析された応答テーブルが結果に返されるようにします。
私の問題は 2 つあります: 1) 受信メッセージが非同期で、実行中のスクリプトとは別のスレッドで受信され、2) 受信する次のパケットは必ずしも要求に対する応答ではないため、受信パケットを解析して一致させる必要があります。シーケンス ID。
現在のプログラム フローは次のようになります。
[C# UI スレッド]
- ボタンクリック
- Lua スクリプトの実行
- SendUnicast を呼び出す
- 応答を待つ
[C# データ スレッド]
- 着信メッセージ
- メッセージを Lua パーサー関数に渡す
- シーケンスが待機中のコマンドと一致する場合、解析されたテーブルを保存し、ブロックされた再開
[C# UI スレッド]
- Lua scipt は解析されたテーブルを返します
現在実行中のスクリプト (UIThread 内) をブロックするための適切な方法が見つからないようです。メッセージが解析されたときに呼び出されるコルーチンを作成するとwhile coroutine.status(co) ~= "dead"
、lua インタープリターが強制終了されるようです。
編集
この問題を処理する正しい方法であるため、BMitch の回答を承認済みとしてマークしています。ただし、LuaInterface はコルーチンをサポートしていないため、コルーチンのサポートを自分で C# コードに追加する必要があったことに注意してください。