XML 応答を受信するには、サーバーに対して非同期 HTTP 呼び出しを行う必要があります。応答を受け取った後、成功の場合は [以前に指定された] 関数を呼び出し、エラーの場合は他の関数を呼び出します。
そこで最初に考えたのがコルーチンです。残念ながら、http.get 呼び出しを行った後は、すべてが完了するまで待機するため、譲れません。別の関数を使用して応答を読み取ることができることはわかっていますが、この関数がトリガーされるためには、少なくともデータの最初のバイトを待つ必要があります。とにかく、コルーチンを使用してやりたいことは、進むべき道のようには見えません。
次に、lua から C 関数を呼び出し、別のスレッドを作成して XML を取得し、Lua で関数を呼び出してみましたが、新しいスレッドが作成された後に lua_state が変更されるため、これは機能しません。スレッドが作成される前に、スタック上に 3 つのパラメーターを確認できます。新しいスレッドの作成後 (引数として lua_State を渡しています)、パラメーターは 1 つしかありません。とにかく、私が理解していることから、元の cfunction 呼び出しが完了すると lua_State が閉じられるため、コールバックすることはできません。
私は lua を使い始めたばかりで、lua から c へのバインドについてもあまり詳しくないので、ばかげた間違いを犯していて、簡単に解決できることを願うばかりです。しかし今のところ、私はさらに先に進む方法について何も考えていません。
この号の裏話: ゲームを Cocos2D Objective C フレームワークから Cocos2d-X C++ フレームワークに移植しています。C++ への移植に失敗すると思われるので、Lua バインディングを使用したいと考えています。とにかくLuaでやりたい。誰かがゲーム内にあるインベントリのリストにアクセスするシーンがあります。応答が即時の場合、基本的にはウィンドウが開いて在庫のリストが表示されます。ただし、データを取得するのに少し時間がかかる場合 [接続の問題、サーバーの過負荷など] 画面がフェードアウトし、データ転送を示すアニメーションが画面に表示されます。少なくともこれは、ゲームの objc バージョンでの動作方法であり、同じことが必要です。
研究中に見逃したことはありますか?それは可能ですか?
ところで、 Lua ソケットの非同期呼び出しを見たことがありますが、転送の開始を待ってから別の転送を開始するため、役に立ちません。