implemented event logger
[NeonServV5.git] / EventLogger.c
1
2 #include "EventLogger.h"
3
4 static struct Event *first_event = NULL, *last_event = NULL;
5
6 struct Event *createEvent(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *command, char **args, int argc, int flags) {
7     struct Event *event = malloc(sizeof(*event));
8     if (!event)
9     {
10         perror("malloc() failed");
11         return NULL;
12     }
13     event->client = client;
14     event->user = user;
15     event->chan = chan;
16     event->event_time = time(0);
17     event->command = strdup(command);
18     char arguments[MAXLEN];
19     int argpos = 0;
20     int i;
21     for(i = 0; i < argc; i++)
22         argpos += sprintf(arguments + argpos, "%s ", args[i]);
23     arguments[(argpos ? argpos-1 : 0)] = '\0';
24     event->arguments = strdup(arguments);
25     event->flags = flags;
26     event->next = NULL;
27     if(last_event) {
28         last_event->next = event;
29         last_event = event;
30     } else {
31         last_event = event;
32         first_event = event;
33     }
34     return event;
35 }
36
37 void logEvent(struct Event *event) {
38     //log!
39 }
40
41 static void destroyEvent(struct Event *event) {
42     if(event == first_event)
43         first_event = event->next;
44     if(event == last_event) {
45         struct Event *last;
46         for(last = first_event; last; last = last->next)
47             if(last->next == NULL) break;
48         last_event = last;
49     }
50     free(event->command);
51     free(event->arguments);
52     free(event);
53 }
54
55 void destroyEvents() {
56     time_t now = time(0);
57     while(first_event && now - first_event->event_time >= 60) {
58         destroyEvent(first_event);
59     }
60 }