int main (int argc, char **argv) { int targc = argc - 1; char **targv = argv + 1; char *worldname = "demo"; const char* datadir = getenv("GLBUMPER_DATA"); if (!datadir) { datadir = "."; } int fps = 25; int port = 20200; srand(time(NULL)); SDL_Init (SDL_INIT_NOPARACHUTE); sock_init(); #ifdef WIN32 SetConsoleCtrlHandler((PHANDLER_ROUTINE)console_ctrl_handler, TRUE); #else signal(SIGINT, sigint); signal(SIGTERM, sigint); #endif while (targc) { if (**targv == '-') { if (!strcmp (*targv + 1, "p")) { targc--; port = atoi(*++targv); } else if (!strcmp (*targv + 1, "D")) { if (!targc--) usage(argv[0]); datadir = *++targv; } else if (!strcmp (*targv + 1, "fps")) { targc--; fps = atoi(*++targv); } else { usage(argv[0]); } } else { worldname = *targv; } targc--; targv++; } FileResourceLoader::set_data_dir(datadir); int framems = 1000/fps; init_engine(); Socket::init(); sptr<ServerThread> svr = GC::track(new ServerThread(framems)); svr->loadworld(worldname); svr->listen(port); svr->start(); while (!server_exit && svr->isrunning()) { dsleep(0.5); }; cout << "\n\n\nGot signal, exiting" << endl; svr->stop(); svr = NULL; cout << "\nBefore collection:\n"; GC::printstats(); GC::collect(); cout << "After collection:\n"; GC::printstats(); //GC::printobjects(); cout<<endl; SDL_Quit (); return 0; }
int main (int argc, char **argv) { int opt; char *configfile = "hosts"; JRB hosts, node, node2; Host *host, *join, *me; int nhosts; int i, j; Message *m; char dest[160]; char msg[256]; Key tmp; ChimeraHost ch; double start; while ((opt = getopt (argc, argv, OPTSTR)) != EOF) { switch ((char) opt) { case 'f': configfile = optarg; break; default: fprintf (stderr, "invalid option %c\n", (char) opt); fprintf (stderr, "usage: %s\n", USAGE); exit (1); } } sem = sema_create (0); state = (ChimeraState *) malloc (sizeof (ChimeraState)); me = (Host *) malloc (sizeof (Host)); me->name = "localhost"; me->port = 11110; me->hnp = "localhost:11110"; hosts = read_hosts (configfile, &nhosts); state->log = log_init (); log_direct (state->log, LOG_ERROR, stderr); log_direct (state->log, LOG_WARN, stderr); key_init (); state->message = message_init (state, 11110); message_handler (state, 21, hello, 1); message_handler (state, 22, fwd, 1); message_handler (state, 23, del, 1); message_handler (state, 24, NULL, 1); srand (time (NULL)); /* This part runs bighost in different hosts */ announced = 0; jrb_traverse (node, hosts) { if (announced == 0) { join = NULL; } else { i = (rand () % announced) + 1; jrb_traverse (node2, hosts) { i--; if (i == 0) break; } join = (Host *) node2->val.v; } host = (Host *) node->val.v; start_host (host, join); dsleep (0.1); }
static int ufw_send(ufw_sk *sk){ struct timeval time; struct node *cur; struct hookinfo *hki; struct iphdr *ip; struct sockaddr_in addr; double delay; int r; static struct timeval last = {0, 0}; size_t len; if(!sk){ errno = EBADF; return -1; } ip = (struct iphdr *)sk->sendbuf; len = ntohs(ip->tot_len); delay = 0; if(sk->limit_byte > 0) delay = (double)len/sk->limit_byte; if(sk->limit_packet > 0 && (ip->protocol == IPPROTO_UDP || (sk->limit_packet_flags & sk->sendbuf[(ip->ihl << 2) + 13])) && 1./sk->limit_packet > delay) delay = 1./sk->limit_packet; gettimeofday(&time, NULL); if(last.tv_sec){ delay -= time.tv_sec - last.tv_sec + (time.tv_usec - last.tv_usec)/1e6; if(delay > 0) dsleep(delay); } gettimeofday(&last, NULL); do{ addr.sin_family = AF_INET; addr.sin_port = sk->proto; addr.sin_addr.s_addr = sk->daddr; r = sendto(sk->fd, sk->sendbuf, len, 0, (struct sockaddr *)&addr, sizeof(addr)); }while(r < 0 && errno == EAGAIN); gettimeofday(&time, NULL); if(!sk->first_packet.tv_sec) sk->first_packet = time; if(r < 0){ if(sk->opts & FATAL)die("sendto"); return -1; } for(cur = sk->sendhook; cur; cur = cur->next){ hki = cur->data; if(!hki->func(sk->sendbuf, &time, 1, hki->user)) return r; } if((sk->opts & DUMP_SEND) && sk->dump) dump_write(sk->dump, sk->sendbuf, 0, &time); time.tv_sec -= sk->first_packet.tv_sec; time.tv_usec -= sk->first_packet.tv_usec; if(time.tv_usec < 0)time.tv_usec += 1000000; if(sk->opts & PRINT_SEND) print_packet(sk->sendbuf, &time, 1); return r; }