Use a API do Link SDK for C para implementar o recurso revert-RPC (RRPC) em um dispositivo. Este exemplo usa o arquivo de código de amostra demos/mqtt_rrpc_demo.c.
Informações básicas
Para obter mais informações sobre o recurso RRPC, consulte Visão geral.
O RRPC está disponível apenas para dispositivos conectados ao IoT Platform via MQTT. Para obter mais informações sobre o código de conexão MQTT, consulte Visão geral.
Procedimento
-
Inicialize um cliente.
Para obter mais informações, consulte Etapa 1: Inicialização.
-
Configure os recursos necessários.
Para obter mais informações, consulte Etapa 2: Configurar recursos.
-
Estabeleça uma conexão.
Para obter mais informações, consulte Etapa 3: Solicitar uma conexão.
-
Receba uma mensagem RRPC.
-
Após o dispositivo se conectar ao IoT Platform, chame a operação RRpc para enviar um comando RRPC ao dispositivo. Os tópicos a seguir estão disponíveis:
-
O dispositivo chama a função aiot_mqtt_recv para receber a mensagem RRPC. Em seguida, uma função de callback processa a mensagem.
Neste exemplo, usa-se uma função de callback chamada demo_mqtt_default_recv_handler.
-
Defina uma função de callback para processar a mensagem RRPC.
ImportanteApós receber a solicitação, o dispositivo deve enviar uma resposta em até 8 segundos. Caso contrário, o IoT Platform considerará a chamada como falha, independentemente de o dispositivo ter recebido a solicitação.
Ao definir a lógica de callback, observe os seguintes pontos:
-
Verifique se a mensagem é do tipo RRPC com base no formato do tópico.
-
Se você usar um tópico específico de RRPC, o dispositivo não precisará assinar esse tópico.
Formato do tópico:
/sys/${YourProductKey}/${YourDeviceName}/rrpc/request/${messageId}. Para obter mais informações, consulte Usar tópicos específicos de RRPC. -
Caso use um tópico personalizado, o dispositivo deverá assiná-lo. Para obter mais informações, consulte Etapa 6: Assinar um tópico.
Ao usar um tópico personalizado para enviar uma mensagem, ela será entregue ao dispositivo por meio do tópico de solicitação RRPC correspondente. Formato do tópico de solicitação RRPC:
/ext/rrpc/${messageId}/${topic}. Para obter mais informações, consulte Chamar um tópico personalizado (Recomendado).
-
Defina a lógica de processamento do callback: após receber a mensagem RRPC, o dispositivo processa o comando e envia uma resposta ao IoT Platform.
Neste exemplo, a mensagem RRPC é impressa e uma resposta com o payload definido como
pongé retornada ao IoT Platform.
void demo_mqtt_default_recv_handler(void *handle, const aiot_mqtt_recv_t *packet, void *userdata) { switch (packet->type) { …… …… case 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: Define the logic for processing business messages that are sent by the server. */ */ /* The following sample code shows a sample RRPC response. */ { 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: { } } } -
-
-
Feche a conexão.
Para obter mais informações, consulte Etapa 8: Desconectar.
-
Encerre o programa.
Para obter mais informações, consulte Etapa 9: Sair do programa.
Próximos passos
-
Após configurar o arquivo de código de amostra, compile-o para gerar um arquivo executável. Neste exemplo, o arquivo executável gerado é ./output/mqtt-rrpc-demo.
Para obter mais informações, consulte Compilar e executar.
Para obter mais detalhes sobre o resultado da execução, consulte Visualizar logs.