#include "net_mod_server_socket_wrapper.h" #include "net_mod_socket_wrapper.h" #include "bus_server_socket_wrapper.h" #include "shm_mm_wrapper.h" #include "usg_common.h" #include #include #include #include #include #include #define SVR_PORT 5000 #define TOTAL_THREADS 2 static void *gBusServer_socket = NULL; static void *gServer_socket = NULL; static int gShm_size = -1; static int gPort = -1; static int gBusServer_act = 0; static int gBusServer_stat = 0; pthread_t tids[2]; void *res[2]; void *bus_start(void *skptr) { gBusServer_act = 1; gBusServer_socket = bus_server_socket_wrapper_open(); if (bus_server_socket_wrapper_start_bus(gBusServer_socket) != 0) { printf("start bus failed\n"); gBusServer_stat = -1; } return NULL; } void *svr_start(void *skptr) { int port = *(int *)skptr; gServer_socket = net_mod_server_socket_open(port); if(net_mod_server_socket_start(gServer_socket) != 0) { printf("start net mod server failed\n"); } return NULL; } int main(int argc, char *argv[]) { char *endptr; char i; int val; sigset_t mask_all, pre; sigfillset(&mask_all); sigprocmask(SIG_BLOCK, &mask_all, &pre); if (argc >= 4) { fprintf(stderr, "Usage: %s [shm size] [server port]\n", argv[0]); exit(0); }; if (argc >= 2) { argc -= 2; for (i = 0; i <= argc; i++) { errno = 0; val = strtol(argv[i + 1], &endptr, 10); if ((errno == ERANGE && (val == LONG_MAX || val == LONG_MIN)) || (errno != 0 && val == 0)) { fprintf(stderr, "invalid parameter: %s\n", argv[i + 1]); exit(0); } if (endptr == argv[i + 1]) { fprintf(stderr, "invalid parameter %s: No digits were found\n", argv[i + 1]); exit(0); } if (i == 0) { gShm_size = val; } else { gPort = val; } } } if (gShm_size == -1) { gShm_size = SHM_RES_SIZE; } shm_mm_wrapper_init(SHM_RES_SIZE); pthread_create(&tids[0], NULL, bus_start, NULL); if (gPort == -1) { gPort = SVR_PORT; } while(gBusServer_act == 0) { sleep(1); } if (gBusServer_stat >= 0) { pthread_create(&tids[1], NULL, svr_start, (void *)&gPort); } for (i = 0; i< TOTAL_THREADS; i++) { if(pthread_join(tids[i], &res[i]) != 0) { perror("bus_proxy pthread_join"); } } bus_server_socket_wrapper_close(gBusServer_socket); net_mod_socket_close(gServer_socket); shm_mm_wrapper_destroy(); return 0; }