From 68d23225a38a35f1325eb39fa4ed5a005d5de473 Mon Sep 17 00:00:00 2001 From: fujuntang <fujuntang@aiot.com> Date: 星期三, 11 八月 2021 09:50:20 +0800 Subject: [PATCH] fix from 3.1 first commit --- src/socket/bus_server_socket.cpp | 26 ++++++++++++++++++-------- 1 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/socket/bus_server_socket.cpp b/src/socket/bus_server_socket.cpp index 657941b..7a45696 100644 --- a/src/socket/bus_server_socket.cpp +++ b/src/socket/bus_server_socket.cpp @@ -39,7 +39,6 @@ subscripter_set = map_iter->second; if(subscripter_set != NULL && (set_iter = subscripter_set->find(key) ) != subscripter_set->end()) { subscripter_set->erase(set_iter); -// printf("remove_subscripter %s, %d\n", map_iter->first, key); count++; } } @@ -201,7 +200,6 @@ subscripter_set = map_iter->second; for(set_iter = subscripter_set->begin(); set_iter != subscripter_set->end(); set_iter++) { send_key = *set_iter; -// logger->debug("_proxy_pub send before %d \n", send_key); rv = shm_sendto(shm_socket, buf, size, send_key, &timeout, BUS_TIMEOUT_FLAG); if(rv == 0) { continue; @@ -232,26 +230,28 @@ char resp_buf[128]; bus_head_t head; + int rv; + char send_buf[512] = { 0x00 }; + const char *topic_delim = ","; -// logger.debug("_run_proxy_ server receive before\n"); + while(shm_recvfrom(shm_socket, (void **)&buf, &size, &key) == 0) { -// logger.debug("_run_proxy_ server recvfrom %d after: %s \n", key, buf); head = ShmModSocket::decode_bus_head(buf); topics = buf + BUS_HEAD_SIZE; action = head.action; -// logger.debug("_run_proxy_ : %s\n", action); + if(strcmp(action, "sub") == 0) { // 璁㈤槄鏀寔澶氫富棰樿闃� topic = strtok(topics, topic_delim); -// logger.debug("_run_proxy_ topic = %s\n", topic); while(topic) { + _proxy_sub(trim(topic, 0), key); topic = strtok(NULL, topic_delim); } } else if(strcmp(action, "desub") == 0) { -// logger.debug("desub topic=%s,%s,%d\n", topics, trim(topics, 0), strcmp(trim(topics, 0), "")); + if(strcmp(trim(topics, 0), "") == 0) { // 鍙栨秷鎵�鏈夎闃� _proxy_desub_all(key); @@ -259,6 +259,7 @@ topic = strtok(topics, topic_delim); while(topic) { + _proxy_desub(trim(topic, 0), key); topic = strtok(NULL, topic_delim); } @@ -270,7 +271,16 @@ _proxy_pub(topics, content, head.content_size, key); } - else if(strcmp(action, "stop") == 0) { + else if (strncmp(buf, "request", strlen("request")) == 0) { + sprintf(send_buf, "%4d", key); + strncpy(send_buf + 4, buf, (sizeof(send_buf) - 4) >= (strlen(buf) + 1) ? strlen(buf) : (sizeof(send_buf) - 4)); + + rv = shm_sendto(shm_socket, send_buf, strlen(send_buf) + 1, key); + if(rv != 0) { + logger->error( "BusServerSocket::_run_proxy_ : requst answer fail!\n"); + } + } + else if(strcmp(action, "stop") == 0) { logger->info( "Stopping Bus..."); free(buf); break; -- Gitblit v1.8.0