| | |
| | | #include "net_mod_server_socket_wrapper.h" |
| | | #include "net_mod_socket_wrapper.h" |
| | | #include "bus_server_socket_wrapper.h" |
| | | |
| | | #include "shm_mm_wraper.h" |
| | | #include "usg_common.h" |
| | | #include <getopt.h> |
| | |
| | | |
| | | void * client; |
| | | |
| | | void *proxy_server_handler(void *sockt) { |
| | | pthread_detach(pthread_self()); |
| | | |
| | | char action[512]; |
| | | while ( true) { |
| | | printf("Input action: Close?\n"); |
| | | if(scanf("%s",action) < 1) { |
| | | printf("Invalide action\n"); |
| | | continue; |
| | | } |
| | | |
| | | if(strcmp(action, "close") == 0) { |
| | | net_mod_server_socket_close(sockt); |
| | | break; |
| | | } else { |
| | | printf("Invalide action\n"); |
| | | } |
| | | } |
| | | } |
| | | |
| | | void start_net_proxy(int port) { |
| | | pthread_t tid; |
| | | printf("Start net proxy\n"); |
| | | void *serverSocket = net_mod_server_socket_open(port); |
| | | |
| | | // 创建一个线程,可以关闭server |
| | | pthread_create(&tid, NULL, proxy_server_handler, serverSocket); |
| | | if(net_mod_server_socket_start(serverSocket) != 0) { |
| | | err_exit(errno, "net_mod_server_socket_start"); |
| | | } |
| | | } |
| | | |
| | | |
| | | // 打印接受到的订阅消息 |
| | | void *print_sub_msg(void *sockt) { |
| | | pthread_detach(pthread_self()); |
| | | void *recvbuf; |
| | |
| | | |
| | | } |
| | | |
| | | |
| | | void *bus_handler(void *sockt) { |
| | | pthread_detach(pthread_self()); |
| | | |
| | | char action[512]; |
| | | while ( true) { |
| | | printf("Input action: Close?\n"); |
| | | if(scanf("%s",action) < 1) { |
| | | printf("Invalide action\n"); |
| | | continue; |
| | | } |
| | | |
| | | if(strcmp(action, "close") == 0) { |
| | | bus_server_socket_wrapper_close(sockt); |
| | | break; |
| | | } else { |
| | | printf("Invalide action\n"); |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | void start_bus_server() { |
| | | printf("Start bus server\n"); |
| | | void * server_socket = bus_server_socket_wrapper_open(); |
| | | pthread_t tid; |
| | | // 创建一个线程,可以关闭bus |
| | | // pthread_create(&tid, NULL, bus_handler, server_socket); |
| | | if(bus_server_socket_wrapper_start_bus(server_socket) != 0) { |
| | | printf("start bus failed\n"); |
| | | exit(1); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | void start_reply(int key) { |
| | | printf("start reply\n"); |
| | | void *client = net_mod_socket_open(); |
| | | net_mod_socket_bind(client, key); |
| | | int size; |
| | | void *recvbuf; |
| | | char sendbuf[512]; |
| | | int rv; |
| | | int remote_port; |
| | | while ( (rv = net_mod_socket_recvfrom(client, &recvbuf, &size, &remote_port) ) == 0) { |
| | | // printf( "server: RECEIVED REQUEST FROM PORT %d NAME %s\n", remote_port, recvbuf); |
| | | sprintf(sendbuf, "RECEIVED PORT %d NAME %s", remote_port, recvbuf); |
| | | net_mod_socket_sendto(client, sendbuf, strlen(sendbuf) + 1, remote_port); |
| | | free(recvbuf); |
| | | } |
| | | } |
| | | |
| | | // 交互式客户端 |
| | | void start_net_client(char *sendlist, char*publist ){ |
| | | client = net_mod_socket_open(); |
| | | char content[MAXLINE]; |
| | |
| | | net_mod_recv_msg_t *recv_arr; |
| | | |
| | | pthread_t tid; |
| | | // 创建一个线程接受订阅消息 |
| | | pthread_create(&tid, NULL, print_sub_msg, client); |
| | | |
| | | //192.168.5.10:5000:11, 192.168.5.22:5000:11, 192.168.5.104:5000:11 |
| | |
| | | |
| | | if (fgets(content, MAXLINE, stdin) != NULL) { |
| | | // 收到消息的节点即使没有对应的信息, 也要回复一个表示无的消息,否则会一直等待 |
| | | n = net_mod_socket_sendandrecv(client, node_arr, node_arr_size, content, |
| | | strlen(content), &recv_arr, &recv_arr_size); |
| | | printf("send %d nodes\n", n); |
| | | n = net_mod_socket_sendandrecv(client, node_arr, node_arr_size, content, strlen(content), &recv_arr, &recv_arr_size); |
| | | printf(" %d nodes reply\n", n); |
| | | for(i=0; i<recv_arr_size; i++) { |
| | | printf("host:%s, port: %d, key:%d, content: %s\n", |
| | | recv_arr[i].host, |
| | |
| | | } |
| | | } |
| | | else if(strcmp(action, "desub") == 0) { |
| | | printf("Please input buskey and topic!\n"); |
| | | printf("Please input topic!\n"); |
| | | |
| | | scanf("%d %s", &buskey, topic); |
| | | if (net_mod_socket_desub(client, topic, strlen(topic), buskey) == 0) { |
| | | scanf("%s", topic); |
| | | if (net_mod_socket_desub(client, topic, strlen(topic)) == 0) { |
| | | printf("%d Desub success!\n", net_mod_socket_get_key(client)); |
| | | } else { |
| | | printf("Desub failture!\n"); |
| | |
| | | |
| | | } |
| | | else if(strcmp(action, "sub") == 0) { |
| | | printf("Please input buskey and topic!\n"); |
| | | scanf("%d %s",&buskey, topic); |
| | | printf("Please input topic!\n"); |
| | | scanf("%s",topic); |
| | | |
| | | printf("===%d %s\n",buskey, topic); |
| | | if (net_mod_socket_sub(client, topic, strlen(topic), buskey) == 0) { |
| | | if (net_mod_socket_sub(client, topic, strlen(topic)) == 0) { |
| | | printf("%d Sub success!\n", net_mod_socket_get_key(client)); |
| | | } else { |
| | | printf("Sub failture!\n"); |
| | |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | void start_bus_server(int key) { |
| | | printf("Start bus server\n"); |
| | | void * server_socket = net_mod_socket_open(); |
| | | |
| | | net_mod_socket_bind(server_socket, key); |
| | | |
| | | net_mod_socket_start_bus(server_socket); |
| | | } |
| | | |
| | | |
| | | |
| | | void start_reply(int key) { |
| | | printf("start reply\n"); |
| | | void *socket = net_mod_socket_open(); |
| | | net_mod_socket_bind(socket, key); |
| | | int size; |
| | | void *recvbuf; |
| | | char sendbuf[512]; |
| | | int rv; |
| | | int remote_port; |
| | | while ( (rv = net_mod_socket_recvfrom(socket, &recvbuf, &size, &remote_port) ) == 0) { |
| | | // printf( "server: RECEIVED REQUEST FROM PORT %d NAME %s\n", remote_port, recvbuf); |
| | | sprintf(sendbuf, "RECEIVED PORT %d NAME %s", remote_port, recvbuf); |
| | | net_mod_socket_sendto(socket, sendbuf, strlen(sendbuf) + 1, remote_port); |
| | | free(recvbuf); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | void *_run_sendandrecv_(void *arg) { |
| | | Targ *targ = (Targ *)arg; |
| | |
| | | |
| | | // port = atoi(argv[2]); |
| | | |
| | | if(opt.fun == NULL) { |
| | | usage(argv[0]); |
| | | exit(1); |
| | | } |
| | | |
| | | if (strcmp("start_net_proxy", opt.fun) == 0 ) { |
| | | if(opt.port == 0) { |
| | |
| | | |
| | | } |
| | | else if (strcmp("start_bus_server", opt.fun) == 0) { |
| | | if(opt.key == 0) { |
| | | usage(argv[0]); |
| | | exit(1); |
| | | } |
| | | start_bus_server(opt.key); |
| | | |
| | | start_bus_server(); |
| | | } |
| | | else if (strcmp("start_reply", opt.fun) == 0) { |
| | | if(opt.key == 0) { |
| | |
| | | exit(1); |
| | | |
| | | } |
| | | |
| | | printf("==========end========\n"); |
| | | shm_mm_wrapper_destroy(); |
| | | |
| | | } |
| | | |
| | |
| | | for(i = 0; i < entry_arr_len; i++) { |
| | | property_arr_len = str_split(entry_arr[i], ":", &property_arr); |
| | | // printf("%s, %s, %s\n", property_arr[0], property_arr[1], property_arr[2]); |
| | | node_arr[i] = {trim(property_arr[0], 0), atoi(property_arr[1]), atoi(property_arr[2])}; |
| | | free(entry_arr[i]); |
| | | node_arr[i] = {trim(property_arr[0], 0), atoi(property_arr[1]), 0}; |
| | | |
| | | free(property_arr[1]); |
| | | free(property_arr[2]); |
| | | if(property_arr_len == 3) { |
| | | node_arr[i].key = atoi(property_arr[2]); |
| | | free(property_arr[2]); |
| | | } |
| | | free(entry_arr[i]); |
| | | |
| | | } |
| | | *node_arr_addr = node_arr; |
| | | |