fujuntang
2021-09-07 b984dac55bdd0a5b694837fb8fb2ceb07ce9808f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#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 <signal.h>
#include <limits.h>
#include <stdio.h>
#include <errno.h>
#include <getopt.h>
#include <stdlib.h>
 
#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;
}