fix msg callback

This commit is contained in:
ethan.du 2021-01-25 13:28:31 +08:00
parent 17edc680a1
commit 390689219d
1 changed files with 38 additions and 40 deletions

View File

@ -211,12 +211,15 @@ void edge_set_subdev_status_handle(edge_subdev_status_handler subdev_status_hand
return;
}
static void _on_local_message(natsMsg *msg)
static void _on_local_message(natsConnection *nc, natsSubscription *sub, natsMsg *msg, void *closure)
{
log_write(LOG_DEBUG, "Received local msg: %s - %.*s", natsMsg_GetSubject(msg), natsMsg_GetDataLength(msg), natsMsg_GetData(msg));
cJSON *msg_json = cJSON_Parse(natsMsg_GetData(msg));
if (!msg_json)
{
log_write(LOG_ERROR, "on local message json parse error: [%s]",cJSON_GetErrorPtr());
natsMsg_Destroy(msg);
return;
}
cJSON *topic = cJSON_GetObjectItem(msg_json, "topic");
@ -224,6 +227,7 @@ static void _on_local_message(natsMsg *msg)
{
log_write(LOG_ERROR, "cannot find topic, illegal msg");
cJSON_Delete(msg_json);
natsMsg_Destroy(msg);
return;
}
log_write(LOG_DEBUG, "_on_broadcast_message topic:%s", topic->valuestring);
@ -233,6 +237,7 @@ static void _on_local_message(natsMsg *msg)
{
log_write(LOG_ERROR, "cannot find topic, illegal msg");
cJSON_Delete(msg_json);
natsMsg_Destroy(msg);
return;
}
log_write(LOG_DEBUG, "_on_local_message deviceSN:%s", device_sn_tmp->valuestring);
@ -242,6 +247,7 @@ static void _on_local_message(natsMsg *msg)
{
log_write(LOG_ERROR, "cannot find payload, illegal msg");
cJSON_Delete(msg_json);
natsMsg_Destroy(msg);
return;
}
log_write(LOG_DEBUG, "_on_local_message msg_base64code:%s", msg_base64code->valuestring);
@ -250,6 +256,7 @@ static void _on_local_message(natsMsg *msg)
{
log_write(LOG_ERROR, "msg_base64decode malloc fail!");
cJSON_Delete(msg_json);
natsMsg_Destroy(msg);
return;
}
memset(msg_base64decode, 0, NATS_MSG_MAX_LEN);
@ -272,15 +279,19 @@ static void _on_local_message(natsMsg *msg)
end:
cJSON_Delete(msg_json);
EDGE_FREE(msg_base64decode);
natsMsg_Destroy(msg);
return;
}
static void _on_broadcast_message(natsMsg *msg)
static void _on_broadcast_message(natsConnection *nc, natsSubscription *sub, natsMsg *msg, void *closure)
{
log_write(LOG_DEBUG, "Received broadcast msg: %s - %.*s", natsMsg_GetSubject(msg), natsMsg_GetDataLength(msg), natsMsg_GetData(msg));
cJSON *msg_json = cJSON_Parse(natsMsg_GetData(msg));
if (!msg_json)
{
log_write(LOG_ERROR, "on broadcast message json parse msg error: [%s]",cJSON_GetErrorPtr());
natsMsg_Destroy(msg);
return;
}
cJSON *topic = cJSON_GetObjectItem(msg_json, "topic");
@ -288,6 +299,7 @@ static void _on_broadcast_message(natsMsg *msg)
{
log_write(LOG_ERROR, "cannot find topic, illegal msg");
cJSON_Delete(msg_json);
natsMsg_Destroy(msg);
return;
}
log_write(LOG_DEBUG, "_on_broadcast_message topic:%s", topic->valuestring);
@ -296,6 +308,7 @@ static void _on_broadcast_message(natsMsg *msg)
{
log_write(LOG_ERROR, "cannot find payload, illegal msg");
cJSON_Delete(msg_json);
natsMsg_Destroy(msg);
return;
}
log_write(LOG_DEBUG, "_on_broadcast_message msg_base64code:%s", msg_base64code->valuestring);
@ -304,6 +317,7 @@ static void _on_broadcast_message(natsMsg *msg)
{
log_write(LOG_ERROR, "msg_base64decode malloc fail!");
cJSON_Delete(msg_json);
natsMsg_Destroy(msg);
return;
}
memset(msg_base64decode, 0, NATS_MSG_MAX_LEN);
@ -356,21 +370,26 @@ static void _on_broadcast_message(natsMsg *msg)
end:
cJSON_Delete(msg_json);
EDGE_FREE(msg_base64decode);
natsMsg_Destroy(msg);
return;
}
static void _on_edge_state_message(natsMsg *msg)
static void _on_edge_state_message(natsConnection *nc, natsSubscription *sub, natsMsg *msg, void *closure)
{
log_write(LOG_DEBUG, "Received state msg: %s - %.*s", natsMsg_GetSubject(msg), natsMsg_GetDataLength(msg), natsMsg_GetData(msg));
cJSON *msg_json = cJSON_Parse(natsMsg_GetData(msg));
if (!msg_json)
{
log_write(LOG_ERROR, "on broadcast message json parse error: [%s]",cJSON_GetErrorPtr());
natsMsg_Destroy(msg);
return;
}
cJSON *state = cJSON_GetObjectItem(msg_json, "state");
if(NULL == state)
{
log_write(LOG_ERROR, "cannot find state, illegal msg");
natsMsg_Destroy(msg);
return;
}
char *state_str = cJSON_Print(state);
@ -385,6 +404,7 @@ static void _on_edge_state_message(natsMsg *msg)
}
EDGE_FREE(state);
natsMsg_Destroy(msg);
return;
}
@ -431,28 +451,6 @@ static int _subdev_client_match(void *a, void *b)
return false;
}
//subject: edge.local.driverId msg handle
static void _recv_msg_handle(natsConnection *nc, natsSubscription *sub, natsMsg *msg, void *closure)
{
log_write(LOG_DEBUG, "Received msg: %s - %.*s", natsMsg_GetSubject(msg), natsMsg_GetDataLength(msg), natsMsg_GetData(msg));
if(0 == strncmp(natsMsg_GetSubject(msg), edge_local_subject, strlen(edge_local_subject)))
{
_on_local_message(msg);
}
else if(0 == strncmp(natsMsg_GetSubject(msg), EDGE_LOCAL_BROADCAST_SUBJECT, strlen(EDGE_LOCAL_BROADCAST_SUBJECT)))
{
_on_broadcast_message(msg);
}
else if(0 == strncmp(natsMsg_GetSubject(msg), EDGE_STATE_REPLY_SUBJECT, strlen(EDGE_STATE_REPLY_SUBJECT)))
{
_on_edge_state_message(msg);
}
natsMsg_Destroy(msg);
return;
}
static void _handle_status_sync(int signo)
{
edge_status status;
@ -613,7 +611,7 @@ edge_status edge_common_init(void)
log_write(LOG_DEBUG, "edge_local_subject:%s",edge_local_subject);
//sub edge.local.driverId
status = _edge_subscribe(edge_local_subject, _recv_msg_handle, NULL);
status = _edge_subscribe(edge_local_subject, _on_local_message, NULL);
if(EDGE_OK != status)
{
log_write(LOG_ERROR, "edge_subscribe %s fail! status:%d", edge_local_subject, status);
@ -621,7 +619,7 @@ edge_status edge_common_init(void)
}
//edge.local.broadcast
status = _edge_subscribe(EDGE_LOCAL_BROADCAST_SUBJECT, _recv_msg_handle, NULL);
status = _edge_subscribe(EDGE_LOCAL_BROADCAST_SUBJECT, _on_broadcast_message, NULL);
if(EDGE_OK != status)
{
log_write(LOG_ERROR, "edge_subscribe %s fail! status:%d", EDGE_LOCAL_BROADCAST_SUBJECT, status);
@ -629,7 +627,7 @@ edge_status edge_common_init(void)
}
//edge.state.reply
status = _edge_subscribe(EDGE_STATE_REPLY_SUBJECT, _recv_msg_handle, NULL);
status = _edge_subscribe(EDGE_STATE_REPLY_SUBJECT, _on_edge_state_message, NULL);
if(EDGE_OK != status)
{
log_write(LOG_ERROR, "edge_subscribe %s fail! status:%d", EDGE_STATE_REPLY_SUBJECT, status);