このトピックでは、Link SDK for CのAPI操作を呼び出して、デバイスのrevert-RPC (RRPC) 機能を実装する方法について説明します。 この例では、demos/mqtt_rrpc_demo.cという名前のサンプルコードファイルが使用されています。
背景情報
手順
クライアントを初期化します。
詳細については、「手順1: クライアントの初期化」をご参照ください。
必要な機能を設定します。
詳細については、「手順2: 機能の設定」をご参照ください。
接続を確立します。
詳細については、「手順3: 接続の確立」をご参照ください。
RRPCメッセージを受信する。
デバイスがIoT Platformに接続された後、IoT PlatformのRRpc操作を呼び出して、RRPCコマンドをデバイスに送信できます。 次のトピックを使用できます。
デバイスは、RRPCメッセージを受信するためにaiot_mqtt_recv関数を呼び出す。 次に、RRPCメッセージを処理するためにコールバック関数が呼び出される。
この例では、demo_mqtt_default_recv_handlerという名前のコールバック関数が使用されます。
RRPCメッセージを処理するコールバック関数を定義します。
重要デバイスがリクエストを受信したら、8秒以内にレスポンスを送信する必要があります。 それ以外の場合、IoT Platformは、デバイスがリクエストを受信したかどうかに関係なく、呼び出しが失敗したと判断します。
コールバックの処理ロジックを指定する場合は、次の項目に注意してください。
トピック形式に基づいて、メッセージがRRPCメッセージであるかどうかを確認します。
RRPC固有のトピックを使用する場合、デバイスはトピックをサブスクライブする必要はありません。
トピック形式:
/sys/${YourProductKey}/${YourDeviceName}/rrpc/request/${messageId}詳細については、「RRPC固有のトピックの使用」をご参照ください。カスタムトピックを使用する場合、デバイスはトピックをサブスクライブする必要があります。 トピックをサブスクライブする方法の詳細については、「手順6: トピックをサブスクライブする」をご参照ください。
カスタムトピックを使用してメッセージを送信すると、対応するRRPC-requestトピックを使用してメッセージがデバイスに送信されます。 RRPCリクエストトピックの形式:
/ext/rrpc/${messageId}/${topic}詳細については、「カスタムトピックの使用 (推奨) 」をご参照ください。
コールバックの処理ロジックを指定する: デバイスがRRPCメッセージを受信すると、デバイスはコマンドを処理してIoT Platformに応答を送信します。
この例では、RRPCメッセージが印刷され、payloadパラメーターが
pongに設定されている応答がIoT Platformに返されます。
void demo_mqtt_default_recv_handler(void * handle, const aiot_mqtt_recv_t * packet, void * userdata) { switch (packet->type) { …… …… ケースAIOT_MQTTRECV_PUB: { printf("pub, qos: % d, topic: %.* s\n", packet->data.pub.qos, packet->data.pub.topic_len, packet->data.pub.topic); printf("pub, payload: %.* s\n", packet->data.pub.payload_len, packet->data.pub.payload); /* TODO: サーバーによって送信されるビジネスメッセージを処理するためのロジックを定義します。 */ */ /* 次のサンプルコードは、RRPCレスポンスのサンプルを示しています。 */ { char * payload = "pong"; char resp_topic[256]; if(packet->data.pub.topic_len > 256) { break; } memset(resp_topic, 0, sizeof(resp_topic)); memcpy(resp_topic、packet->data.pub.topic、packet->data.pub.topic_len); aiot_mqtt_pub(handle, resp_topic, (uint8_t *)payload, (uint32_t)strlen(payload), 0); } } break; …… …… default: { } } }
接続を閉じます。
詳細については、「手順8: IoT Platformからデバイスを切断する」をご参照ください。
プログラムを終了します。
詳細については、「ステップ9: プログラムを終了する」をご参照ください。