From 937cb95ee88ce4f57cb4510be459a72033fbbb94 Mon Sep 17 00:00:00 2001 From: guowenxue <guowenxue@gmail.com> Date: Wed, 26 Jun 2019 12:59:06 +0800 Subject: [PATCH] update mqttd program, add ID support --- pj1_mqttd/etc/conf.c | 17 ++++++++ pj1_mqttd/etc/mqttd.conf | 2 + pj1_mqttd/main.c | 67 ++++++++++++++++----------------- pj1_mqttd/etc/conf.h | 2 + 4 files changed, 53 insertions(+), 35 deletions(-) diff --git a/pj1_mqttd/etc/conf.c b/pj1_mqttd/etc/conf.c index 19b4dea..ed05e55 100644 --- a/pj1_mqttd/etc/conf.c +++ b/pj1_mqttd/etc/conf.c @@ -25,9 +25,11 @@ if( !conf_file ) { + strncpy(ctx->id, "\"x86host02\"", sizeof(ctx->id)); /* logger settings */ - strncpy(ctx->logfile, "/tmp/mqttd.log", sizeof(ctx->logfile)); + //strncpy(ctx->logfile, "/tmp/mqttd.log", sizeof(ctx->logfile)); + strncpy(ctx->logfile, DBG_LOG_FILE, sizeof(ctx->logfile)); ctx->loglevel = LOG_LEVEL_DEBUG; ctx->logsize = 1024; @@ -92,6 +94,19 @@ log_nrml("Logger system initialise ok\n"); + /*+------------------------------------------------------+ + *| parser production ID | + *+------------------------------------------------------+*/ + + if( !(str=iniparser_getstring(ini, "common:id", NULL)) ) + { + log_err("ERROR: Parser production ID failure\n"); + return -2; + } + snprintf(ctx->id, sizeof(ctx->id), "\"%s\"", str); + //strncpy(ctx->id, str, sizeof(ctx->id) ); + + log_nrml("Parser production ID [%s]\n", ctx->id); /*+------------------------------------------------------+ diff --git a/pj1_mqttd/etc/conf.h b/pj1_mqttd/etc/conf.h index 24c439a..b6b41b2 100644 --- a/pj1_mqttd/etc/conf.h +++ b/pj1_mqttd/etc/conf.h @@ -34,6 +34,8 @@ typedef struct mqtt_ctx_s { + char id[32]; /* production ID */ + /* logger settings */ char logfile[128]; /* logger record file */ int loglevel; /* logger level */ diff --git a/pj1_mqttd/etc/mqttd.conf b/pj1_mqttd/etc/mqttd.conf index 37bde36..f875af9 100644 --- a/pj1_mqttd/etc/mqttd.conf +++ b/pj1_mqttd/etc/mqttd.conf @@ -1,3 +1,5 @@ +[common] +id="x86host02" [logger] diff --git a/pj1_mqttd/main.c b/pj1_mqttd/main.c index 54c23bb..942e51d 100644 --- a/pj1_mqttd/main.c +++ b/pj1_mqttd/main.c @@ -257,9 +257,8 @@ void proc_json_items(cJSON *root) { int i; + cJSON *item; char *value; - cJSON *item; - cJSON *array; if( !root ) { @@ -267,44 +266,26 @@ return ; } - for( i=0; i<cJSON_GetArraySize(root); i++ ) + item = cJSON_GetObjectItem(root, "camera"); + if( !item ) { - item = cJSON_GetArrayItem(root, i); - if( !item ) - break; - - /* if item is cJSON_Object, then recursive call proc_json */ - if( cJSON_Object == item->type ) - { - proc_json_items(item); - } - else if( cJSON_Array == item->type ) - { - /* Logic C920 camera control */ - if( !strcasecmp(item->string, "camera") ) - { - array = cJSON_GetArrayItem(item, 0); - if( NULL != array ) - { - cJSON *led_item; - - if( NULL != (led_item=cJSON_GetObjectItem(array , "C920")) ) - { - log_nrml("turn Logic C920 camera '%s'\n", led_item->valuestring); - turn_camera( led_item->valuestring ); - } - } - } - } + log_err("cJSON_Parse get camera failure: %s\n", cJSON_GetErrorPtr()); + return ; } + value = cJSON_PrintUnformatted(item); + + turn_camera(value); + + free(value); } void sub_message_callback(struct mosquitto *mosq, void *userdata, const struct mosquitto_message *message) { - cJSON *root = NULL; - char *out; - + mqtt_ctx_t *ctx = (mqtt_ctx_t *)userdata; + cJSON *root = NULL; + cJSON *item; + char *value; if ( !message->payloadlen ) { @@ -312,7 +293,7 @@ return ; } - log_nrml("Subscriber receive message: '%s'\n", message->payload); + log_dbg("Subscriber receive message: '%s'\n", message->payload); root = cJSON_Parse(message->payload); if( !root ) @@ -321,8 +302,26 @@ return ; } + item = cJSON_GetObjectItem(root, "id"); + if( !item ) + { + log_err("cJSON_Parse get ID failure: %s\n", cJSON_GetErrorPtr()); + goto OUT; + } + + + value = cJSON_PrintUnformatted(item); + if( strcasecmp(value, ctx->id) ) + { + free(value); + goto OUT; + } + free(value); + + log_nrml("Subscriber[%s] receive message: '%s'\n", ctx->id, message->payload); proc_json_items(root); +OUT: cJSON_Delete(root); /* must delete it, or it will result memory leak */ return ; } -- Gitblit v1.9.1