Ohara Lab

gRPC Frame Quick Start

StreamCall / 画像転送 / EventBus / イベント購読

開発ガイド / gRPC 詳細ガイド / トップ

DeviceClass の public メソッドを gRPC Frame の動的ディスパッチで公開し、別プロセスから呼び出す最小例。機器固有の API 定義や .proto の個別追加は不要である。ここでは既存の aandd_reader 実装と grpc_frame のソースにある呼び出し形式を用いる。

1. DeviceClass

DeviceClass は通信機能を含まない。以下の Counter は説明用のローカル Python クラスである。

class Counter:
    def __init__(self):
        self.value = 0

    def increment(self, amount: int = 1) -> int:
        self.value += amount
        return self.value

2. サーバー

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 のようにポートやロガーを設定から受け取り、終了時に機器接続を閉じる。

3. クライアント

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 が提供するメソッドである。

4. 次に読む記事

詳細ガイドで、StreamCall、イベント購読、同期・非同期クライアント、型定義生成、エラーと接続管理を説明する。導入・配布は既存のインストールマニュアルを参照する。