int main(int argc, char *argv[]) { SVCXPRT *utransp, *ttransp; struct sockaddr_in addr; DIR *dp; struct direct *d; ni_name tag = NULL; ni_namelist nl; ni_index i; int pid, localonly, nctoken = -1; int log_pri = LOG_NOTICE; struct rlimit rlim; char *netinfod_argv[16]; /* XXX */ int netinfod_argc, x; union wait wait_stat; pid_t child_pid; char *pri; #ifdef _UNIX_BSD_43_ int ttyfd; #endif localonly = 1; netinfod_argc = 0; netinfod_argv[netinfod_argc++] = (char *)NETINFO_PROG; debug = 0; for (i = 1; i < argc; i++) { if (!strcmp(argv[i], "-n")) { netinfod_argv[netinfod_argc++] = argv[i]; } if (!strcmp(argv[i], "-d")) { debug = 1; log_pri = LOG_DEBUG; if ((argc > (i+1)) && (argv[i+1][0] != '-')) debug = atoi(argv[++i]); } if (!strcmp(argv[i], "-l")) { if ((argc > (i+1)) && (argv[i+1][0] != '-')) log_pri = atoi(argv[++i]); } if (!strcmp(argv[i], "-D")) { netinfod_argv[netinfod_argc++] = "-d"; if ((argc > (i+1)) && (argv[i+1][0] != '-')) { netinfod_argv[netinfod_argc++] = argv[i]; } } if (!strcmp(argv[i], "-L")) { netinfod_argv[netinfod_argc++] = "-l"; if ((argc > (i+1)) && (argv[i+1][0] != '-')) { netinfod_argv[netinfod_argc++] = argv[i]; } else { pri = malloc(sizeof("999")); sprintf(pri, "%d", LOG_DEBUG); netinfod_argv[netinfod_argc++] = pri; } } } if (debug == 1) { system_log_open("nibindd", LOG_NDELAY | LOG_PID, LOG_NETINFO, stderr); system_log_set_max_priority(log_pri); system_log(LOG_DEBUG, "version %s - debug mode\n", _PROJECT_VERSION_); } else { closeall(); system_log_open("nibindd", LOG_NDELAY | LOG_PID, LOG_NETINFO, NULL); system_log_set_max_priority(log_pri); system_log(LOG_DEBUG, "version %s - starting\n", _PROJECT_VERSION_); child_pid = fork(); if (child_pid == -1) { system_log(LOG_ALERT, "fork() failed: %m, aborting"); system_log_close(); exit(1); } else if (child_pid > 0) { signal(SIGTERM, parentexit); system_log(LOG_DEBUG, "parent waiting for child to start"); wait4(child_pid, (_WAIT_TYPE_ *)&wait_stat, 0, 0); if (WIFEXITED(wait_stat)) { system_log(LOG_DEBUG, "unexpected child exit, status=%d", WEXITSTATUS(wait_stat)); } else { system_log(LOG_DEBUG, "unexpected child exit, received signal=%d", WTERMSIG(wait_stat)); } system_log_close(); exit(1); } } restart = 0; rlim.rlim_cur = rlim.rlim_max = RLIM_INFINITY; setrlimit(RLIMIT_CORE, &rlim); signal(SIGCHLD, catchchild); signal(SIGTERM, killchildren); signal(SIGHUP, catchhup); signal(SIGINT, SIG_IGN); notify_register_signal(NETWORK_CHANGE_NOTIFICATION, SIGHUP, &nctoken); writepid(); /* * cd to netinfo directory, find out which databases should * be served and lock the directory before registering service. */ if (chdir(NETINFO_DIR) < 0) { killparent(); system_log(LOG_ALERT, "cannot chdir to netinfo directory"); exit(1); } dp = opendir(NETINFO_DIR); if (dp == NULL) { killparent(); system_log(LOG_ALERT, "cannot open netinfo directory"); exit(1); } MM_ZERO(&nl); while ((d = readdir(dp))) { if (isnidir(d->d_name, &tag)) { if (ni_namelist_match(nl, tag) == NI_INDEX_NULL) { system_log(LOG_DEBUG, "found database: %s", tag); ni_namelist_insert(&nl, tag, NI_INDEX_NULL); if (strcmp(tag, "local")) localonly = 0; } ni_name_free(&tag); } } #ifdef _NETINFO_FLOCK_ /* * Do not close the directory: keep it locked so another nibindd * won't run. */ if (flock(dp->dd_fd, LOCK_EX|LOCK_NB) < 0) { killparent(); system_log(LOG_ALERT, "nibindd already running"); exit(1); } fcntl(dp->dd_fd, F_SETFD, 1); #else closedir(dp); #endif /* * Register as a SUNRPC service */ memset(&addr, 0, sizeof(struct sockaddr_in)); addr.sin_family = AF_INET; if (localonly == 1) addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); pmap_unset(NIBIND_PROG, NIBIND_VERS); utransp = svcudp_bind(RPC_ANYSOCK, addr); if (utransp == NULL) { killparent(); system_log(LOG_ALERT, "cannot start udp service"); exit(1); } if (!svc_register(utransp, NIBIND_PROG, NIBIND_VERS, nibind_prog_1, IPPROTO_UDP)) { killparent(); system_log(LOG_ALERT, "cannot register udp service"); exit(1); } udp_sock = utransp->xp_sock; ttransp = svctcp_bind(RPC_ANYSOCK, addr, 0, 0); if (ttransp == NULL) { killparent(); system_log(LOG_ALERT, "cannot start tcp service"); exit(1); } if (!svc_register(ttransp, NIBIND_PROG, NIBIND_VERS, nibind_prog_1, IPPROTO_TCP)) { killparent(); system_log(LOG_ALERT, "cannot register tcp service"); exit(1); } waitreg = 0; for (i = 0; i < nl.ninl_len; i++) { netinfod_argv[netinfod_argc] = nl.ninl_val[i]; netinfod_argv[netinfod_argc + 1] = NULL; system_log(LOG_DEBUG, "starting netinfod %s", nl.ninl_val[i]); system_log(LOG_DEBUG, "execv debug 0: %s", NETINFO_PROG); for (x = 0; netinfod_argv[x] != NULL; x++) { system_log(LOG_DEBUG, "execv debug %d: %s", x, netinfod_argv[x]); } pid = fork(); if (pid == 0) { /* child */ execv(NETINFO_PROG, netinfod_argv); exit(-1); } #ifdef DEBUG system_log(LOG_DEBUG, "netinfod %s pid = %d", nl.ninl_val[i], pid); #endif if (pid > 0) { waitreg++; storepid(pid, nl.ninl_val[i]); } else { system_log(LOG_ERR, "server for tag %s failed to start", nl.ninl_val[i]); } } ni_namelist_free(&nl); /* * Detach from controlling tty. * Do this AFTER starting netinfod so "type c to continue..." works. */ #ifdef _UNIX_BSD_43_ ttyfd = open("/dev/tty", O_RDWR, 0); if (ttyfd > 0) { ioctl(ttyfd, TIOCNOTTY, NULL); close(ttyfd); } setpgrp(0, getpid()); #else if (setsid() < 0) syslog(LOG_ERR, "nibindd: setsid() failed: %m"); #endif system_log(LOG_DEBUG, "starting RPC service"); nibind_svc_run(); system_log(LOG_ALERT, "svc_run returned"); system_log_close(); exit(1); }
int main(int argc, char **argv) { daemonize(); storepid();//Lagra pid nummer för att kunna stänga med stop-skript srand(time(NULL)); gameOver = true; ghostHitCount = 0; r3p1v.x = 180; r3p1v.y = 97; r3p1v.w = 16; r3p1v.h = 50; r3p1h.x = 440; r3p1h.y = 97; r3p1h.w = 16; r3p1h.h = 50; r2p0v.x = 0; r2p0v.y = 195; r2p0v.w = 16; r2p0v.h = 50; r2p0h.x = 270; r2p0h.y = 195; r2p0h.w = 16; r2p0h.h = 50; r2p1v.x = 370; r2p1v.y = 195; r2p1v.w = 16; r2p1v.h = 50; r2p1h.x = 622; r2p1h.y = 195; r2p1h.w = 16; r2p1h.h = 50; r1p1v.x = 190; r1p1v.y = 297; r1p1v.w = 16; r1p1v.h = 50; r1p1h.x = 450; r1p1h.y = 297; r1p1h.w = 16; r1p1h.h = 50; r0p0v.x = 0; r0p0v.y = 415; r0p0v.w = 16; r0p0v.h = 50; r0p0h.x = 622; r0p0h.y = 415; r0p0h.w = 16; r0p0h.h = 50; ghostRect1.x = 300; ghostRect1.y = 97; ghostRect1.w = 50; ghostRect1.h = 50; ghostRect2.x = 50; ghostRect2.y = 195; ghostRect2.w = 50; ghostRect2.h = 50; ghostRect3.x = 500; ghostRect3.y = 195; ghostRect3.w = 50; ghostRect3.h = 50; ghostRect4.x = 300; ghostRect4.y = 297; ghostRect4.w = 50; ghostRect4.h = 50; ghostRect5.x = 400; ghostRect5.y = 415; ghostRect5.w = 50; ghostRect5.h = 50; IPaddress ip, *remoteIP; int quit, quit2; char buffer[512]; bool clientInitiated; firstPosition = false; SDL_Thread *client1, *client2, *enemy1, *enemy2, *enemy3, *enemy4, *enemy5; positionSetMutex = SDL_CreateMutex(); ghostHitMutex = SDL_CreateMutex(); if(!positionSetMutex) { return 0; } if(!ghostHitMutex) { return 0; } initFunctions(&ip, &sd); //Initiera TCP för SDL enemy1 = SDL_CreateThread(nextMove, "ghost1", &ghostRect1); enemy2 = SDL_CreateThread(nextMove, "ghost1", &ghostRect2); enemy3 = SDL_CreateThread(nextMove, "ghost1", &ghostRect3); enemy4 = SDL_CreateThread(nextMove, "ghost1", &ghostRect4); enemy5 = SDL_CreateThread(nextMove, "ghost1", &ghostRect5); while(true) { if(gameOver == true) { waitForClients(&sd); // Väntar på 2 st klienter ska koppla upp sig resetVariables(); gameOver = false; client1Position = 0; client1 = SDL_CreateThread(startClient, "Client1", (void *)NULL); client2 = SDL_CreateThread(startClient, "Client2", (void *)NULL); SDL_DetachThread(client1); // Förhindrar att trÃ¥den tar upp minne efter att den stänger ner SDL_DetachThread(client2); } SDL_Delay(1000); } SDLNet_TCP_Close(sd); SDLNet_Quit(); return EXIT_SUCCESS; }