summaryrefslogtreecommitdiff
path: root/src/include/events.h
blob: dcea64d0b0b76af71529ae6f5e93df9d2a8d396f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#ifndef EVENTS_H
#define EVENTS_H

#include "SDL/SDL.h"
#include "data_types.h"
#include "utils.h"

// Event and eventList management

enum eventType_t { eReady, eTimeSync, eLemAction };

typedef struct _event_t {
	id_t clientId;
	tick_t eventTick;
	tick_t serverTick;

	enum eventType_t type;

	id_t lemId;
	unsigned int newRole: 4;

	struct _event_t *prev, *next;
} event_t;

typedef struct {
	event_t *first, *last;
	SDL_mutex *lock;
} eventList_t;

int eventSerializedSize();
void eventSerialize(const event_t *e, char *buf);
int eventUnserialize(event_t *e, char *buf);

void eventListInit(eventList_t *elist);
void eventListFree(eventList_t *elist);

int eventListLock(eventList_t *elist);
int eventListUnlock(eventList_t *elist);

void eventListAdd(eventList_t *elist, event_t *event);
event_t * eventListPop(eventList_t *elist);

int eventListItemCount(eventList_t *elist);

void eventListSort(eventList_t *elist);

#endif //EVENTS_H