初期化とゲームとの接続
GPB では、外部プログラム側がサーバーとなり、クライアントであるゲームが接続すると言う流れで通信を確立します。
初期化
GPB の基本的な機能はBridgeというクラスにまとめています。
GPB をつかってゲームを操作したい場合にはまず、Bridgeクラスのインスタンスを生成してください。
接続
次に Bridge.wait_to_connect()関数でクライアント(ゲーム)の接続を待ちます。
Python 側がこの関数を呼び出した後、速やかにクライアント側を起動してください。
レベル/シーン遷移時の再接続
GPB は、Unreal Engine のパーシスタントレベル、Unity のシーン遷移時に一旦クライアントが切断することを想定しています。 レベル/シーンごとに行うべき処理が大きく変わるので、再接続を行う方が都合が良い場合が多いと考えられるためです。
ゲーム側でレベル/シーン遷移が行われた際、現在の処理を終え、再び Bridge.wait_to_connect() でクライアントの接続を待つようにしてください。
接続の失敗
インスタンス生成時に指定したタイムアウト時間を過ぎると失敗扱いとなり、Falseを返します。
切断
Bridge.disconnect()関数を実行することでネットワークを切断することが出来ます。
外的要因による切断
何らかの理由でネットワークが切断された場合は、Bridge.receive()などの関数がOSError例外を送出します。
内部で試用している TCP の都合もあり、全てを OSError 例外として扱えるようにしてあります。
なお、Bridge.disconnect()関数実行後にBridge.receive()などの関数を実行した場合もOSError例外を送出します。
終了
最終的に、OS リソース開放のためBridgeクラスのインスタンスを削除してください。
サンプルコード
from bridge import bridge
bridge = bridge.Bridge(address="127.0.0.1", port=8000, is_compress=True)
while True:
if not bridge.wait_to_connect():
break
try:
while True:
game_dict = bridge.receive()
bridge.send()
except OSError as e:
pass # ネットワークの切断発生
com_bridge.disconnect()