From 36e6a90a33983154633c99f7ac95d09dd68f7bcb Mon Sep 17 00:00:00 2001
From: wangzhengquan <wangzhengquan85@126.com>
Date: 星期三, 24 二月 2021 16:53:06 +0800
Subject: [PATCH] update

---
 test_net_socket/CMakeLists.txt    |    8 +-
 test_net_socket/shm_util.cpp      |  164 ++++++++++++++++++++++++++++++++---------
 src/net/net_mod_socket.h          |    4 -
 test_net_socket/net_mod_socket.sh |   29 +++---
 CMakeLists.txt                    |    1 
 src/net/net_mod_socket.cpp        |   27 ------
 6 files changed, 148 insertions(+), 85 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5d9be24..8cbc168 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -30,5 +30,4 @@
 	add_subdirectory(${PROJECT_SOURCE_DIR}/test)
 	add_subdirectory(${PROJECT_SOURCE_DIR}/test_net_socket)
 	add_subdirectory(${PROJECT_SOURCE_DIR}/test_socket)
-	add_subdirectory(${PROJECT_SOURCE_DIR}/shm_util)
 endif()
diff --git a/src/net/net_mod_socket.cpp b/src/net/net_mod_socket.cpp
index a863f6d..2932d8c 100644
--- a/src/net/net_mod_socket.cpp
+++ b/src/net/net_mod_socket.cpp
@@ -15,37 +15,14 @@
 
 NetModSocket::NetModSocket() 
 {
-  int s;
   if (Signal(SIGPIPE, SIG_IGN) == SIG_ERR)
     logger->error(errno, "NetModSocket::NetModSocket signal");
-
-  // gpool = new NetConnPool();
-
-  // pthread_mutexattr_t mtxAttr;
-  // s = pthread_mutexattr_init(&mtxAttr);
-  // if (s != 0)
-  //   err_exit(s, "pthread_mutexattr_init");
-  // s = pthread_mutexattr_settype(&mtxAttr, PTHREAD_MUTEX_ERRORCHECK);
-  // if (s != 0)
-  //   err_exit(s, "pthread_mutexattr_settype");
-  // s = pthread_mutex_init(&sendMutex, &mtxAttr);
-  // if (s != 0)
-  //   err_exit(s, "pthread_mutex_init");
-
-  // s = pthread_mutexattr_destroy(&mtxAttr);
-  // if (s != 0)
-  //   err_exit(s, "pthread_mutexattr_destroy");
 
 }
 
 
 NetModSocket::~NetModSocket() {
-  // int s;
-  // delete gpool;
-  // s =  pthread_mutex_destroy(&sendMutex);
-  // if(s != 0) {
-  //   err_exit(s, "shm_socket_close");
-  // }
+ 
 }
 
 
@@ -193,7 +170,7 @@
         err_arr[n_recv_err].key = node->key;
         err_arr[n_recv_err].code = ret;
         n_recv_err++;
-        logger->error("NetModSocket:: %d _sendandrecv_ to key %d failed, %s", get_key(), node->key, bus_strerror(ret));
+        logger->error("NetModSocket::  _sendandrecv_ to key %d failed. %s",  node->key, bus_strerror(ret));
       }
 
      
diff --git a/src/net/net_mod_socket.h b/src/net/net_mod_socket.h
index 68f5294..b02ea6e 100644
--- a/src/net/net_mod_socket.h
+++ b/src/net/net_mod_socket.h
@@ -256,10 +256,6 @@
   int  pub_nowait( char *topic, int topic_size, void *content, int content_size, int key);
 
 
-
-  
-   
-
   /**
    * 鑾峰彇soket key
    */
diff --git a/test_net_socket/CMakeLists.txt b/test_net_socket/CMakeLists.txt
index 81cf641..8abb1c2 100644
--- a/test_net_socket/CMakeLists.txt
+++ b/test_net_socket/CMakeLists.txt
@@ -7,9 +7,9 @@
 
 
 # add the executable
-add_executable(test_net_mod_socket test_net_mod_socket.cpp  ${PROJECT_BINARY_DIR}/bin/net_mod_socket.sh)
-target_link_libraries(test_net_mod_socket PRIVATE shm_queue  ${EXTRA_LIBS} )
-target_include_directories(test_net_mod_socket PRIVATE
+add_executable(shm_util shm_util.cpp  ${PROJECT_BINARY_DIR}/bin/net_mod_socket.sh)
+target_link_libraries(shm_util PRIVATE shm_queue  ${EXTRA_LIBS} )
+target_include_directories(shm_util PRIVATE
                             "${PROJECT_BINARY_DIR}"
                              ${EXTRA_INCLUDES}
                             )
@@ -31,4 +31,4 @@
 
 
 # add the install targets
-install(TARGETS test_net_mod_socket DESTINATION bin)
+install(TARGETS shm_util DESTINATION bin)
diff --git a/test_net_socket/net_mod_socket.sh b/test_net_socket/net_mod_socket.sh
index 7e12074..00a0d45 100755
--- a/test_net_socket/net_mod_socket.sh
+++ b/test_net_socket/net_mod_socket.sh
@@ -1,28 +1,27 @@
 function server() {
 	
 	# 寮�鍚痓us 
- ./test_net_mod_socket --fun="start_bus_server"  & server_pid=$! &&  echo "pid: ${server_pid}"
+ ./shm_util start_bus_server  & server_pid=$! &&  echo "pid: ${server_pid}"
 	# 寮�鍚綉缁滆浆鍙戜唬鐞�
-	./test_net_mod_socket  --fun="start_net_proxy" --port=5000 & server_pid=$! && echo "pid: ${server_pid}" 
+	./shm_util  start_net_proxy --port=5000 & server_pid=$! && echo "pid: ${server_pid}" 
 
 	# 鎵撳紑璇锋眰搴旂瓟娴嬭瘯鐨勬帴鍙楃
-	./test_net_mod_socket --fun="start_reply" --key=100 & server_pid=$! &&  echo "pid: ${server_pid}" 
-	./test_net_mod_socket --fun="start_reply" --key=101 & server_pid=$! &&  echo "pid: ${server_pid}" 
-	./test_net_mod_socket --fun="start_reply" --key=102 & server_pid=$! &&  echo "pid: ${server_pid}" 
+	./shm_util start_reply --key=100 & server_pid=$! &&  echo "pid: ${server_pid}" 
+	./shm_util start_reply --key=101 & server_pid=$! &&  echo "pid: ${server_pid}" 
+	./shm_util start_reply --key=102 & server_pid=$! &&  echo "pid: ${server_pid}" 
 
 	# 鎵撳紑鍥為槦鍒楁敹杩涚▼
-	./test_net_mod_socket --fun="start_resycle" & server_pid=$! &&  echo "pid: ${server_pid}" 
+	./shm_util start_resycle & server_pid=$! &&  echo "pid: ${server_pid}" 
 }
 
 # 浜や簰寮忓鎴风
 function client() {
-
-	# ./test_net_mod_socket --fun="start_net_client" \
+	# ./shm_util start_net_client \
 	#  --sendlist="192.168.5.10:5000:11, 192.168.5.22:5000:11, 192.168.20.104:5000:11" \
 	#  --publist="192.168.5.10:5000:8, 192.168.5.22:5000:8, 192.168.20.104:5000:8"
 
 
-	./test_net_mod_socket --fun="start_net_client" \
+	./shm_util start_net_client \
 	 --sendlist=" :5000:100" \
 	 --publist="localhost:5000"  
 
@@ -31,38 +30,38 @@
 
 # one_to_many send
 function one_to_many() {
-	./test_net_mod_socket --fun="one_sendto_many" \
+	./shm_util one_sendto_many \
 	 --sendlist=" :5000:100, :5000:101, :5000:102"
 	 
 }
 
 #  
 function send() {
-	./test_net_mod_socket --fun="test_net_sendandrecv" \
+	./shm_util test_net_sendandrecv \
 	 --sendlist=" :5000:100, :5000:101, :5000:102"
 	 
 }
  
 # 鏃犻檺寰幆 pub
 function pub() {
-	./test_net_mod_socket --fun="test_net_pub" \
+	./shm_util test_net_pub \
 	 --publist="localhost:5000, localhost:5000"
 	 
 }
 # 澶氱嚎绋媝ub
 function mpub() {
-	./test_net_mod_socket --fun="test_net_pub_threads" \
+	./shm_util test_net_pub_threads \
 	 --publist="localhost:5000, localhost:5000"
 	 
 }
 
 function stop() {
-	ps -ef | grep -e "test_net_mod_socket" -e "heart_beat"| awk  '{print $2}' | xargs -i kill -15 {}
+	ps -ef | grep -e "shm_util" -e "heart_beat"| awk  '{print $2}' | xargs -i kill -15 {}
 	
 }
 
 function close() {
-	ps -ef | grep -e "test_net_mod_socket" -e "heart_beat"| awk  '{print $2}' | xargs -i kill -9 {}
+	ps -ef | grep -e "shm_util" -e "heart_beat"| awk  '{print $2}' | xargs -i kill -9 {}
 	ipcrm -a
 }
 
diff --git a/test_net_socket/test_net_mod_socket.cpp b/test_net_socket/shm_util.cpp
similarity index 86%
rename from test_net_socket/test_net_mod_socket.cpp
rename to test_net_socket/shm_util.cpp
index ab46f31..34efbc4 100644
--- a/test_net_socket/test_net_mod_socket.cpp
+++ b/test_net_socket/shm_util.cpp
@@ -21,7 +21,6 @@
 
 struct argument_t {
   bool interactive;
-  char *fun;
   int port;
   int key;
   char *sendlist;
@@ -526,19 +525,77 @@
   net_mod_socket_close(client);
 }
 
+void list () {
+  hashtable_t *hashtable = mm_get_hashtable();
+  hashtable_foreach(hashtable, [&](int key, void * value){
+    printf("%d\n", key);
+  });
+}
+
+
+void remove(int key) {
+  hashtable_t *hashtable = mm_get_hashtable();
+  
+  LockFreeQueue<shm_packet_t> * mqueue = (LockFreeQueue<shm_packet_t> *)hashtable_get(hashtable, key);
+  if(mqueue != NULL) {
+    delete mqueue;
+    hashtable_remove(hashtable, key);
+  }
+}
+
+void do_sendandrecv(int key, char *sendbuf) {
+  int n, j;
+  int recv_arr_size;
+  net_mod_recv_msg_t *recv_arr;
+
+  net_node_t node_arr[] = {NULL, 0, key};
+
+  void * client = net_mod_socket_open();
+  n = net_mod_socket_sendandrecv_timeout(client, node_arr, 1, sendbuf, strlen(sendbuf) + 1, &recv_arr, &recv_arr_size, 5);
+  if(n == 0) {
+    printf("send failed\n");
+    return;
+  }
+  printf(" %d nodes reply\n", n);
+  for(j=0; j < recv_arr_size; j++) {
+
+    fprintf(stdout, "%d send '%s' to %d. received  from (host=%s, port= %d, key=%d) '%s'\n\n",
+      net_mod_socket_get_key(client),
+      sendbuf,
+      key,
+      recv_arr[j].host,
+      recv_arr[j].port,
+      recv_arr[j].key,
+      (char *)recv_arr[j].content
+    );
+  }
+
+  net_mod_socket_close(client);
+}
+
 
 
 void usage(char *name)
 {
-  fprintf(stderr, "Usage: %s  [OPTIONS]  [ARG...]\n\n", name);
-  fprintf(stderr, "Test net mod socket\n\n");
-  fprintf(stderr, "Options:\n\n");
   #define fpe(str) fprintf(stderr, "  %s", str);
-  fpe("-f, --funciton                       Function name\n");
+
+  fprintf(stderr, "Usage: %s {function} [OPTIONS]  [ARG...]\n\n", name);
+  fprintf(stderr, "Test shmsocket\n\n");
+
+  fprintf(stderr, "Options:\n\n");
   fpe("-p, --port                           TCP/IP Port\n");
   fpe("-k, --key                            SHM Key\n");
   fpe("--sendlist                           format锛�--sendlist=\"192.168.5.10:5000:11, 192.168.5.22:5000:11, 192.168.20.104:5000:11\"\n");
   fpe("--publist                            format: --publist=\"192.168.5.10:5000:8, 192.168.5.22:5000:8, 192.168.20.104:5000:8\"\n");
+  fpe("\n");
+
+  fprintf(stderr, "Examples:\n\n");
+  fpe("# sendandrecv to socket which has key 100\n");
+  fpe("./shm_util sendandrecv 100 \"hello\"\n");
+  fpe("# list all key\n");
+  fpe("./shm_util list\n");
+  fpe("# remove  key 1001\n");
+  fpe("./shm_util rm 1001\n");
   fpe("\n");
 }
 
@@ -553,10 +610,7 @@
     exit(1);
   }
 
-  if(argc == 2 && strcmp(argv[1], "--help") == 0) {
-    usage(argv[0]);
-    exit(0);
-  }
+  
   
   argument_t mopt = {};
   
@@ -570,7 +624,6 @@
   {
     /* These options set a flag. */
      
-    {"fun",  required_argument, 0, 'f'},
     {"key",  required_argument, 0, 'k'},
     {"port",  required_argument, 0, 'p'},
     {"interactive",  no_argument, 0, 'i'},
@@ -612,10 +665,6 @@
     
       break;
      
-    case 'f':
-      mopt.fun = optarg;
-      break;
-
     case 'k':
       mopt.key = atoi(optarg);
       break;
@@ -708,37 +757,78 @@
 
 
 int main(int argc, char *argv[]) {
-  shm_mm_wrapper_init(512);
- 
-  argument_t opt = parse_args(argc, argv);
+  int i;
+  char *prog;
+  char * fun;
+  argument_t opt;
 
- // port = atoi(argv[2]);
-   
-  if(opt.fun == NULL) {
+  shm_mm_wrapper_init(512);
+
+  if(argc < 2) {
     usage(argv[0]);
     exit(1);
   }
+  prog = argv[0];
+  fun = argv[1];
+  argc--;
+  argv++;
 
-  if (strcmp("start_net_proxy", opt.fun) == 0 ) {
+
+  if (strcmp("help", fun) == 0 ) {
+    usage(prog);
+  }
+  else if (strcmp("list", fun) == 0 ) {
+    list();
+  }
+  else if (strcmp("rm", fun) == 0 ) {
+    if(argc < 2) {
+      usage(prog);
+      exit(1);
+    }
+    for(i = 1; i < argc; i++) {
+      int key = atoi(argv[i]);
+      remove(key);
+    }
+  }
+  else if (strcmp("sendandrecv", fun) == 0 ) {
+    if(argc < 3) {
+      usage(prog);
+      exit(1);
+    }
+    int key = atoi(argv[1]);
+    char *content = argv[2];
+    do_sendandrecv(key, content);
+  }
+  else if (strcmp("start_bus_server", fun) == 0) {
+   
+    start_bus_server(opt);
+  }
+  else if (strcmp("start_resycle", fun) == 0) {
+    
+    start_resycle();
+  }
+
+  else if (strcmp("start_net_proxy", fun) == 0 ) {
+    opt =  parse_args(argc, argv);
     if(opt.port == 0) {
-      usage(argv[0]);
+      usage(prog);
       exit(1);
     }
     start_net_proxy(opt);
     
   }
-  else if (strcmp("start_bus_server", opt.fun) == 0) {
-     
-    start_bus_server(opt);
-  }
-  else if (strcmp("start_reply", opt.fun) == 0) {
+  
+  else if (strcmp("start_reply", fun) == 0) {
+    opt =  parse_args(argc, argv);
+    opt =  parse_args(argc, argv);
     if(opt.key == 0) {
       usage(argv[0]);
       exit(1);
     }
     start_reply(opt.key);
   }
-  else if (strcmp("start_net_client", opt.fun) == 0) {
+  else if (strcmp("start_net_client", fun) == 0) {
+    opt =  parse_args(argc, argv);
     if(opt.sendlist == 0) {
       fprintf(stderr, "Missing sendlist .\n");
       usage(argv[0]);
@@ -751,7 +841,8 @@
     }
     start_net_client(opt.sendlist, opt.publist);
   }
-  else if (strcmp("one_sendto_many", opt.fun) == 0) {
+  else if (strcmp("one_sendto_many", fun) == 0) {
+    opt =  parse_args(argc, argv);
     if(opt.sendlist == 0) {
       fprintf(stderr, "Missing sendlist .\n");
       usage(argv[0]);
@@ -760,7 +851,8 @@
      
     one_sendto_many(opt.sendlist);
   }
-  else if (strcmp("test_net_sendandrecv", opt.fun) == 0) {
+  else if (strcmp("test_net_sendandrecv", fun) == 0) {
+    opt =  parse_args(argc, argv);
     if(opt.sendlist == 0) {
       fprintf(stderr, "Missing sendlist .\n");
       usage(argv[0]);
@@ -769,7 +861,8 @@
      
     test_net_sendandrecv(opt.sendlist);
   }
-  else if (strcmp("test_net_pub_threads", opt.fun) == 0) {
+  else if (strcmp("test_net_pub_threads", fun) == 0) {
+    opt =  parse_args(argc, argv);
     if(opt.publist == 0) {
       fprintf(stderr, "Missing publist .\n");
       usage(argv[0]);
@@ -778,7 +871,8 @@
      
     test_net_pub_threads(opt.publist);
   }
-  else if (strcmp("test_net_pub", opt.fun) == 0) {
+  else if (strcmp("test_net_pub", fun) == 0) {
+    opt =  parse_args(argc, argv);
     if(opt.publist == 0) {
       fprintf(stderr, "Missing publist .\n");
       usage(argv[0]);
@@ -787,11 +881,9 @@
      
     test_net_pub(opt.publist);
   }
-  else if (strcmp("start_resycle", opt.fun) == 0) {
-    start_resycle();
-  }
-  
+
   else {
+    printf("%Invalid funciton name\n");
     usage(argv[0]);
     exit(1);
 

--
Gitblit v1.8.0