]> jfr.im git - irc/quakenet/newserv.git/blob - core/main.c
merge
[irc/quakenet/newserv.git] / core / main.c
1 #include "../lib/sstring.h"
2 #include "events.h"
3 #include "schedule.h"
4 #include "hooks.h"
5 #include "modules.h"
6 #include "config.h"
7 #include "error.h"
8 #include "nsmalloc.h"
9
10 #include <stdlib.h>
11 #include <stdio.h>
12 #include <time.h>
13 #include <sys/time.h>
14 #include <signal.h>
15
16 int newserv_shutdown_pending;
17 int newserv_sigusr1_pending;
18
19 void initseed();
20 void init_logfile();
21 void siginthandler(int sig);
22 void sigusr1handler(int sig);
23
24 int main(int argc, char **argv) {
25 initseed();
26 inithooks();
27 inithandlers();
28 initschedule();
29
30 init_logfile();
31
32 initsstring();
33
34 if (argc>1) {
35 initconfig(argv[1]);
36 } else {
37 initconfig("newserv.conf");
38 }
39
40 /* Loading the modules will bring in the bulk of the code */
41 initmodules();
42 signal(SIGINT, siginthandler);
43 signal(SIGUSR1, sigusr1handler);
44
45 /* Main loop */
46 for(;;) {
47 handleevents(10);
48 doscheduledevents(time(NULL));
49 if (newserv_shutdown_pending) {
50 newserv_shutdown();
51 break;
52 }
53
54 if (newserv_sigusr1_pending) {
55 signal(SIGUSR1, sigusr1handler);
56 triggerhook(HOOK_CORE_SIGUSR1, NULL);
57 newserv_sigusr1_pending=0;
58 }
59 }
60
61 nsexit();
62
63 freeconfig();
64 finisstring();
65 }
66
67 /*
68 * seed the pseudo-random number generator, rand()
69 */
70 void initseed() {
71 struct timeval t;
72
73 gettimeofday(&t, NULL);
74 srand(t.tv_usec);
75 }
76
77 void siginthandler(int sig) {
78 newserv_shutdown_pending = 1;
79 }
80
81 void sigusr1handler(int sig) {
82 newserv_sigusr1_pending = 1;
83 }