ゲームからのデータ受信
ゲームから送信させるデータはBridge
が立てた別スレッドで受信し、内部でバッファリングされます。
ゲーム内情報の受信
ゲームと接続した状態でBridge.receive()
関数を呼び出すと、ゲームから送信される JSON データを辞書型として取得することが出来ます。
ブロックモードでの受信
block
引数を指定しない、もしくは True
を指定すると、ブロックモードでデータを受信します。
- ブロックモードでは、まだデータを受信していない (受信バッファが空) 場合、データを受信するまで処理をブロックします
- そのため、受信と送信を繰り返すコードを記述するだけで、ゲームからの送信タイミングに合わせたサイクルで Python 側の処理を行うことが可能です。
ノンブロックモードでの受信
block
引数にFalse
を指定すると、ノンブロックモードでデータを受信します。
- ノンブロックモードでは、まだデータを受信していない (受信バッファが空) 場合、ブロックせずに
None
を返します
受信バッファの制御
ゲームは定期的にゲーム内情報を送信してきます。 この送信間隔よりも Python 側の処理に時間がかかっていくと、受信バッファにデータが溜まっていきます。
Bridge.receive()
では一番古いデータを取得することになります。
そのため、Python 側の処理に時間がかかるようなケースでは受信バッファを意識した処理を記述する必要があります。
現在バッファリングされているデータの数
現在バッファリングされているデータの数は、Bridge.get_receive_qsize()
関数で取得できます。
最新のデータのみを受信し、バッファに溜められた古いデータを消去する
バッファリングされたデータが不要な場合、Bridge.receive_latest()
関数を使う事で、バッファをクリアし、最新のデータのみを取得することが可能です。
Bridge.receive_latest()
はBridge.receive()
と同様に扱えますが、ブロックモードで受信することは出来ず、ノンブロックモードで受信を行います。
ゲームから送信される非同期メッセージの受信
上記とは別に、ゲーム側で定期実行されない処理に関する情報を受け取る仕組みもあります。
ゲーム側の「アイテムを入手した」、「敵を倒した」などのイベントドリブンな処理内でメッセージ送信を挿入しておくと、
Bridge.receive_async_message()
関数でそのメッセージを受信することが出来ます。
Bridge.receive_async_message()
はBridge.receive()
と同様にブロックモードとノンブロックモードの指定が可能です。- このメッセージは通常の受信バッファとは別のバッファに格納され、
Bridge.get_async_qsize()
関数でバッファリングされているメッセージの数を取得可能です。