/* FogCloud message receive callback: handle cloud messages here */ OSStatus user_fogcloud_msg_handler(mico_Context_t* mico_context, const char* topic, const unsigned int topicLen, unsigned char *inBuf, unsigned int inBufLen) { user_log_trace(); OSStatus err = kUnknownErr; mico_fogcloud_msg_t fogcloud_msg; int retCode = MSG_PROP_UNPROCESSED; if((NULL == mico_context) || (NULL == topic) || (0 == topicLen) ) { user_log("ERROR: mico_cloudmsg_dispatch params error, err=%d", err); return kParamErr; } fogcloud_msg.topic = topic; fogcloud_msg.topic_len = topicLen; fogcloud_msg.data = inBuf; fogcloud_msg.data_len = inBufLen; err = mico_fogcloud_msg_dispatch(mico_context, service_table, &fogcloud_msg, &retCode); if(kNoErr != err){ user_log("ERROR: mico_cloudmsg_dispatch error, err=%d", err); } else { if(MSG_PROP_WROTE == retCode){ g_user_context.status.user_config_need_update = true; // user params need update in flash } } return err; }
/* FogCloud msg handle thread */ void user_cloud_msg_handle_thread(void* arg) { OSStatus err = kUnknownErr; fogcloud_msg_t *recv_msg = NULL; mico_fogcloud_msg_t mico_fog_msg; int retCode = MSG_PROP_UNPROCESSED; mico_Context_t *mico_context = (mico_Context_t *)arg; require_action(mico_context, exit, err=kParamErr); while(1){ mico_thread_msleep(100); // in case of while (1) err = MicoFogCloudMsgRecv(mico_context, &recv_msg, 0); if(kNoErr == err){ user_log("Msg recv: topic[%d]=[%.*s]\tdata[%d]=[%.*s]", recv_msg->topic_len, recv_msg->topic_len, recv_msg->data, recv_msg->data_len, recv_msg->data_len, recv_msg->data + recv_msg->topic_len); // msg structure format transfer mico_fog_msg.topic = (const char*)(recv_msg->data); mico_fog_msg.topic_len = recv_msg->topic_len; mico_fog_msg.data = recv_msg->data + recv_msg->topic_len; mico_fog_msg.data_len = recv_msg->data_len; err = mico_fogcloud_msg_dispatch(mico_context, service_table, &mico_fog_msg, &retCode); if(kNoErr != err){ user_log("ERROR: mico_cloudmsg_dispatch error, err=%d", err); } else{ } // NOTE: msg memory must be free after been used. if(NULL != recv_msg){ free(recv_msg); recv_msg = NULL; } } } exit: user_log("ERROR: user_cloud_msg_handle_thread exit with err=%d", err); return; }