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/shm_util.cpp | 164 ++++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 128 insertions(+), 36 deletions(-) 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