From 251bbc8b0ebd9a91d34f81186d9284f6e669b4db Mon Sep 17 00:00:00 2001 From: wangzhengquan <wangzhengquan85@126.com> Date: 星期三, 27 一月 2021 10:13:48 +0800 Subject: [PATCH] update --- src/socket/bus_server_socket.cpp | 28 ++++++++++++++++------------ test_socket/bus_test.cpp | 2 -- src/socket/bus_server_socket.h | 2 +- 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/src/socket/bus_server_socket.cpp b/src/socket/bus_server_socket.cpp index 7354f53..bea4c21 100644 --- a/src/socket/bus_server_socket.cpp +++ b/src/socket/bus_server_socket.cpp @@ -101,7 +101,7 @@ int BusServerSocket::start(){ topic_sub_map = mem_pool_attach<SHMTopicSubMap>(SHM_BUS_MAP_KEY); - run_pubsub_proxy(); + _run_proxy_(); return 0; } @@ -193,19 +193,21 @@ std::vector<int>::iterator vector_iter; int send_key; + int rv; struct timespec timeout = {1,0}; if( (map_iter = topic_sub_map->find(topic) ) != topic_sub_map->end()) { + 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); - if (shm_sendto(shm_socket, buf, size, send_key, &timeout, BUS_TIMEOUT_FLAG) == EBUS_CLOSED ) { - //瀵规柟宸插叧闂殑杩炴帴鏀惧埌寰呭垹闄ら槦鍒楅噷銆傚鏋滅洿鎺ュ垹闄や細璁﹊ter鎸囬拡鍑虹幇閿欎贡 - subscripter_to_del.push_back(send_key); - } else { -// logger->debug("_proxy_pub send after: %d \n", send_key); + rv = shm_sendto(shm_socket, buf, size, send_key, &timeout, BUS_TIMEOUT_FLAG); + if(rv == 0) { + continue; } + //瀵规柟宸插叧闂殑鎴栬�呭搴旂殑杩涚▼琚玨ill鎺夌殑杩炴帴鏀惧埌寰呭垹闄ら槦鍒楅噷銆傚鏋滅洿鎺ュ垹闄や細璁﹊ter鎸囬拡鍑虹幇閿欎贡 + subscripter_to_del.push_back(send_key); } // 鍒犻櫎宸插叧闂殑绔� @@ -220,7 +222,9 @@ } } -void * BusServerSocket::run_pubsub_proxy() { + +// 杩愯浠g悊 +void * BusServerSocket::_run_proxy_() { int size; int key; char * action, *topic, *topics, *buf, *content; @@ -229,17 +233,17 @@ bus_head_t head; const char *topic_delim = ","; -// logger.debug("run_pubsub_proxy server receive before\n"); +// logger.debug("_run_proxy_ server receive before\n"); while(shm_recvfrom(shm_socket, (void **)&buf, &size, &key) == 0) { -// logger.debug("run_pubsub_proxy server recvfrom %d after: %s \n", key, buf); +// 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_pubsub_proxy : %s\n", action); +// logger.debug("_run_proxy_ : %s\n", action); if(strcmp(action, "sub") == 0) { // 璁㈤槄鏀寔澶氫富棰樿闃� topic = strtok(topics, topic_delim); -// logger.debug("run_pubsub_proxy topic = %s\n", topic); +// logger.debug("_run_proxy_ topic = %s\n", topic); while(topic) { _proxy_sub(trim(topic, 0), key); topic = strtok(NULL, topic_delim); @@ -271,7 +275,7 @@ free(buf); break; } else { - logger->error( "BusServerSocket::run_pubsub_proxy : unrecognized action %s", action); + logger->error( "BusServerSocket::_run_proxy_ : unrecognized action %s", action); } free(buf); } diff --git a/src/socket/bus_server_socket.h b/src/socket/bus_server_socket.h index 486bf49..7a6c829 100644 --- a/src/socket/bus_server_socket.h +++ b/src/socket/bus_server_socket.h @@ -29,7 +29,7 @@ private: void _proxy_sub( char *topic, int key); void _proxy_pub( char *topic, void *buf, size_t size, int key); - void *run_pubsub_proxy(); + void *_run_proxy_(); // int parse_pubsub_topic(char *str, size_t size, char **_action, char **_topic, size_t *head_len ); void _proxy_desub( char *topic, int key); diff --git a/test_socket/bus_test.cpp b/test_socket/bus_test.cpp index 1cc4ffd..8d630b6 100644 --- a/test_socket/bus_test.cpp +++ b/test_socket/bus_test.cpp @@ -69,10 +69,8 @@ while (true) { //printf("Usage: pub <topic> [content] or sub <topic>\n"); printf("Can I help you? sub, pub, desub or quit %d\n", i++); - printf("client 1\n"); // scanf("%s", action); std::cin >> action; - printf("client 2\n"); if(strcmp(action, "sub") == 0) { printf("Please input topic!\n"); scanf("%s", topic); -- Gitblit v1.8.0