Custom Command
ユーザー定義コマンドは、Actcast API を経由して、デバイス上の Act に対して任意のコマンドを発行し、実行結果を取得できる機能です。 Actcast API へのリクエストは、デバイス上の Actcast Agent を経由してアプリケーションの handler に届きます。
ActcastOS 3.80.0 以降、または 4.32.0 以降で利用できます。
アプリケーションの開発方法
ユーザー定義コマンドに対応した Actcast アプリケーションを開発するには、 actfw-core のバージョン 2.17.0 以降の CommandServer を使用する必要があります。
アプリケーション内に、ユーザー定義コマンドを処理する handler を用意して、CommandServer のコンストラクタに指定してください。 handler は、リクエストの文字列を解釈して任意の処理を実行後、結果の文字列をレスポンスとして返します。
リクエストの payload、およびレスポンスは 64KiB 以下としてください。
handler は、同一のリクエストで複数回呼び出されることがあります。 複数回の実行が許容できない場合には、リクエストに含まれる UUID を handler で保存して、実行が必要か判定してください。
handler は、他の handler 呼び出しの終了を待たずに、並列で同時に呼び出されることがあります。 handler 内で同時に実行できない処理がある場合には、ロックなどを用いて、他に同時に実行されていないことを確認してください。
以下は、id と payload を含む文字列を返す handler の例です。
import actfw_core
from actfw_core.command_server import CustomCommandRequest
def custom_command_handler(request: CustomCommandRequest) -> str:
custom_command_id = request['id']
payload = request['payload']
message = f"Payload received: {payload} (id: {custom_command_id})"
return message
def main():
app = actfw_core.application.Application()
command_server = actfw_core.CommandServer(custom_command_handler=custom_command_handler)
app.register_task(command_server)
app.run()
if __name__ == "__main__":
main()注意事項
ユーザー定義コマンドに対応していない (古いバージョンの actfw-core を使用している) Act を実行しているデバイスには、ユーザー定義コマンドのリクエストを送信しないでください。 リクエストを送信した場合、CommandServer が終了してしまい、Act を再起動するまでの間は TakePhoto 機能に応答しなくなる可能性があります。 これを回避する必要がある場合は、ユーザー定義コマンドに対応したバージョンの actfw-core を使用して、アプリケーションの更新を行ってください。