void init() { printf("start init \n"); initArrays(); if(initDatabaseConnection() == 1) { printf("error setting up database connection\n"); } if(initUart() == 1) { printf("error connecting to serial device\n"); } if(initServerConnection() == 1) { printf("error setting up database connection\n"); } getDeviceID(); sendDeviceIP(); printf("init done\n"); }
int main(int argc , char *argv[]) { char rline[MAXLINE], my_msg[MAXLINE]; //char *start = "Connected to server\n"; int i, j, n; int s, client_fd, client; fd_set read_fds; struct sockaddr_in server_addr; struct sockaddr_in proxy_addr; struct sockaddr_in client_addr; struct __message rcv = { 0x0, }; struct __message trans = { 0x0, }; pthread_mutex_init(&m_lock, NULL); if(argc < 4) { printf("usage : %s [proxy_port#] [server_ip#] [server_port#] [cache_mode#] [cache_algorithm#]\n", argv[0]); exit(0); } //if(argc else if(argc < 6) { g_uiCacheMode = 0; g_uiCacheAlgorithm = 0; } else { g_uiCacheMode = atoi(argv[4]); g_uiCacheAlgorithm = atoi(argv[5]); } //TODO: init timer handler //initTimerHandler(); //TODO: init cached resource struct initResource(); //TODO: init server connection bzero((char *)&proxy_addr, sizeof(struct sockaddr_in)); server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = inet_addr(argv[2]); server_addr.sin_port = htons(atoi(argv[3])); initServerConnection(server_addr); if((s = socket(PF_INET, SOCK_STREAM, 0)) < 0) { printf("proxy : socket failed!\n"); exit(0); } //if((s = socket /* struct timeval tNow; gettimeofday(&tNow, NULL); addObserver1(200, 2, 1000, 800, tNow); usleep(10*1000); gettimeofday(&tNow, NULL); addObserver1(300, 3, 1000, 2000, tNow); usleep(25*1000); gettimeofday(&tNow, NULL); addObserver1(100, 1, 1000, 400, tNow); //dumpObserver(); //dumpObserver(); dumpObserver(); return;//while(1); */ //TODO: init proxy connection int option = 1; setsockopt( s, SOL_SOCKET, SO_REUSEADDR, &option, sizeof(int) ); bzero((char *)&proxy_addr, sizeof(struct sockaddr_in)); proxy_addr.sin_family = AF_INET; proxy_addr.sin_addr.s_addr = htonl(INADDR_ANY); proxy_addr.sin_port = htons(atoi(argv[1])); if(bind(s, (struct sockaddr *)&proxy_addr, sizeof(struct sockaddr_in)) < 0) { printf("proxy : bind failed!\n"); exit(0); } listen(s, 5); g_piFdMax = s + 1; pthread_t threadId = 0; pthread_create(&threadId, NULL, pthreadWatchResource, (void *)NULL); sprintf(g_strProxyLog, "/tmp/proxy_%d.log", (int)getpid()); while(1) { FD_ZERO(&read_fds); FD_SET(s, &read_fds); for(i=0; i<g_iClientMax; i++) { FD_SET(g_piSocketClient[i], &read_fds); } //for(i=0; g_piFdMax = getFdMax(s) + 1; if(select(g_piFdMax, &read_fds, (fd_set *)0, (fd_set *)0, (struct timeval *)0) < 0) { printf("proxy : select failed\n"); exit(0); }//if(select if(FD_ISSET(s, &read_fds)) { client = sizeof(struct sockaddr_in); client_fd = accept(s, (struct sockaddr *)&client_addr, &client); if(client_fd == -1) { printf("proxy : accept failed!\n"); exit(0); } g_piSocketClient[g_iClientMax] = client_fd; g_iClientMax++; //printf("client_fd=%d, g_iClientMax=%d\n", client_fd, g_iClientMax); //send(client_fd, start, strlen(start), 0); printf("proxy : user#%d added!\n", g_iClientMax); }//if(FD_ISSET for(i=0; i<g_iClientMax; i++) { if(FD_ISSET(g_piSocketClient[i], &read_fds)) { memset(&rcv, 0x0, sizeof(struct __message)); if((n = recv(g_piSocketClient[i], &rcv, sizeof(struct __message), 0)) <= 0) { removeObserver(g_piSocketClient[i]); dumpObserver(); removeClient(i); continue; } if(rcv.cmd == 0x99999999) { removeClient(i); continue; } #if ENABLE_HANDLETHREAD struct timeval timeRecv; gettimeofday(&timeRecv, NULL); rcv.proxy_recved.tv_sec = timeRecv.tv_sec; rcv.proxy_recved.tv_usec = timeRecv.tv_usec; pthread_t ptId = 0; rcv.iFd = g_piSocketClient[i]; pthread_create(&ptId, NULL, pthreadHandleMessage, (void *)&rcv); //usleep(1); #else handleMessage(&rcv); memcpy(&trans, &rcv, sizeof(struct __message)); int temp = send(g_piSocketClient[i], &trans, sizeof(struct __message), 0); #endif } //if(FD_ISSET( } //for(i=0 } //while(1) return 0; }