X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=src%2Fserver%2Fmain.c;h=18c02dc53bb55b39d5fe29f737f9ef53e53003f8;hb=470cc8029bc931275ce82dd33709ba90c4f4c62f;hp=f95637fe00de7365ccfac3858083a66bfe7fafa7;hpb=807782b480c770ea3b64f41035abe50a4749b2df;p=tpg%2Fopendispense2.git diff --git a/src/server/main.c b/src/server/main.c index f95637f..18c02dc 100644 --- a/src/server/main.c +++ b/src/server/main.c @@ -25,6 +25,7 @@ extern void Init_Handlers(void); extern void Load_Itemlist(void); extern void Server_Start(void); +extern int gbServer_RunInBackground; extern int giServer_Port; extern char *gsItemListFile; extern char *gsCoke_SerialPort; @@ -42,6 +43,7 @@ char *gsCokebankPath = "cokebank.db"; struct sPeriodicCall { void (*Function)(void); } gaPeriodicCalls[ciMaxPeriodics]; +pthread_t gTimerThread; // === CODE === void sigint_handler() @@ -67,7 +69,6 @@ void PrintUsage(const char *progname) int main(int argc, char *argv[]) { int i; - pthread_t timer_thread; // Parse Arguments for( i = 1; i < argc; i++ ) @@ -85,6 +86,9 @@ int main(int argc, char *argv[]) if( i + 1 >= argc ) return -1; giDebugLevel = atoi(argv[++i]); break; + case 'D': + gbServer_RunInBackground = 1; + return -1; default: // Usage Error? PrintUsage(argv[0]); @@ -109,14 +113,25 @@ int main(int argc, char *argv[]) char buf[30]; if( i + 1 >= argc ) return -1; fp = fopen(argv[++i], "r"); + if( !fp ) { + fprintf(stderr, "ERROR: Unable to read password file\n"); + perror("reading LAT password"); + return -1; + } fgets(buf, sizeof buf, fp); fclose(fp); - gsDoor_Password = strdup(buf);; + gsDoor_Password = strdup(buf); } else if( strcmp(arg, "--cokebank") == 0 ) { if( i + 1 >= argc ) return -1; gsCokebankPath = argv[++i]; } + else if( strcmp(arg, "--daemonise") == 0 ) { + gbServer_RunInBackground = 1; + } + else if( strcmp(arg, "--dont-daemonise") == 0 ) { + gbServer_RunInBackground = 0; + } else { // Usage error? PrintUsage(argv[0]); @@ -131,6 +146,7 @@ int main(int argc, char *argv[]) } signal(SIGINT, sigint_handler); + signal(SIGTERM, sigint_handler); openlog("odispense2", 0, LOG_LOCAL4); @@ -141,11 +157,9 @@ int main(int argc, char *argv[]) Load_Itemlist(); - pthread_create( &timer_thread, NULL, Periodic_Thread, NULL ); - Server_Start(); - pthread_kill(timer_thread, SIGKILL); + pthread_kill(gTimerThread, SIGKILL); return 0; } @@ -168,6 +182,11 @@ void *Periodic_Thread(void *Unused) return NULL; } +void StartPeriodicThread(void) +{ + pthread_create( &gTimerThread, NULL, Periodic_Thread, NULL ); +} + void AddPeriodicFunction(void (*Fcn)(void)) { int i; @@ -231,6 +250,8 @@ int InitSerial(const char *File, int BaudRate) info.c_lflag = 0; // Non-Canoical, No Echo info.c_cflag = baud | CS8 | CLOCAL | CREAD; // baud, 8N1 + info.c_iflag = IGNCR; // Ignore \r + info.c_oflag = 0; // ??? cfsetspeed(&info, baud); info.c_cc[VTIME] = 0; // No time limit info.c_cc[VMIN] = 1; // Block until 1 char