StreamCall / 画像転送 / EventBus / イベント購読
開発ガイド / gRPC 詳細ガイド / トップ
DeviceClass の public メソッドを gRPC Frame の動的ディスパッチで公開し、別プロセスから呼び出す最小例。機器固有の API 定義や .proto の個別追加は不要である。ここでは既存の aandd_reader 実装と grpc_frame のソースにある呼び出し形式を用いる。
DeviceClass は通信機能を含まない。以下の Counter は説明用のローカル Python クラスである。
class Counter:
def __init__(self):
self.value = 0
def increment(self, amount: int = 1) -> int:
self.value += amount
return self.value
create_grpc_server に インスタンスを ctrl_obj として渡す。起動・停止はサーバー起動スクリプト側で管理する。
from grpc_frame.grpc_server import create_grpc_server
ctrl = Counter()
server = create_grpc_server(ctrl_obj=ctrl, max_workers=10)
if server.add_insecure_port("127.0.0.1:50051") == 0:
raise RuntimeError("gRPC ポートを確保できません")
server.start()
try:
server.wait_for_termination()
finally:
server.stop(grace=None)
上のコードは Counter 定義の後に配置する。実機では aandd_reader のようにポートやロガーを設定から受け取り、終了時に機器接続を閉じる。
from grpc_frame.grpc_client import GrpcClient
client = GrpcClient(server_ip="127.0.0.1", server_port=50051)
try:
print(client.increment(2))
finally:
client.close()
GrpcClient は接続時の Describe で公開メソッドを取得し、Call を使って呼び出す。increment は Frame の固定 API ではなく、サーバー側の Counter が提供するメソッドである。
詳細ガイドで、StreamCall、イベント購読、同期・非同期クライアント、型定義生成、エラーと接続管理を説明する。導入・配布は既存のインストールマニュアルを参照する。