7*24小时人工服务
400-00-52360
设备与平台成功建立连接后,可接收云平台下发的设备控制指令,如服务调用、属性设置等。这里以属性设置为例描述设备控制流程,包括Topic订阅和Topic消息处理两部分。
以Linux版C语言SDK为例,Topic订阅流程为:
1、新建Topic句柄,用以保存组装好的数据;
2、根据三元组信息,组装属性设置的Topic;
3、调用Subscribe函数向云平台订阅该Topic,并指定该Topic消息的处理函数,若返回OK则订阅成功;
4、释放Topic占用的系统空间;
订阅代码:
char * topic_ptr = NULL;
char * payload_ptr = NULL;
/* Build property set topic. */
if((result = SIL_tslm_btopic_propset(pkey_ptr, devname_ptr, &topic_ptr)) == 0)
{
printf("TSLM: build property set topic success. \n");
}
else
{
printf("TSLM: Build property set topic failure. \n");
goto ERR_EXIT;
}
printf("sub topic : %s\n",topic_ptr);
/* Subscribe topic. */
if((result = SIL_lconn_sub2cloud(fd, topic_ptr, &AEL_lconn_sub_cb)) == 0)
{
printf("LCONN: Subscribe property set topic to cloud success. \n");
}
else
{
printf("LCONN: Subscribe property set topic to cloud failure. \n");
goto ERR_EXIT;
}
ERR_EXIT:
if(topic_ptr != NULL)
{
SIL_tslm_free(topic_ptr);
topic_ptr = NULL;
}
在订阅Topic时,向SDK传递了Topic消息的处理函数,消息到来后在处理函数中的流程为:
1、新建Topic句柄和Payload句柄,用以保存解析好的数据;
2、提取Topic和Payload返回给句柄;
3、将解析好的数据传递给另一Thread进行后续处理;
4、退出该函数,且无需释放Topic和Payload句柄所指向空间;
处理代码:
void AEL_lconn_sub_cb(void *msg_ptr)
{
int result = 0;
char * topic_ptr = NULL;
char * payload_ptr = NULL;
int topic_len = 0;
int payload_len = 0;
/* Get Topic string. */
if((result = SIL_lconn_get_topic(&topic_ptr, &topic_len, msg_ptr)) != 0)
{
printf("Topic Failure: errno = %d. \n", result);
}
/* Get Payload string. */
if((result = SIL_lconn_get_payload(&payload_ptr, &payload_len, msg_ptr)) != 0)
{
printf("Payload Failure: errno = %d. \n", result);
}
/* Give topic and payload to other handle thread. */
}
只需完成注册与实名认证,即可体验我们的贴心服务
4000052360
试用小安,请确保该账户已通过智汇云实名认证 前往认证中心>>