rough framework
[lemu] / server.h
1 #ifndef SERVER_H
2 #define SERVER_H
3
4 #include <event2/listener.h>
5 #include <event2/util.h>
6
7 #include <openssl/ssl.h>
8
9 #include <lua.h>
10
11 #include "common.h"
12 #include "connections.h"
13 #include "db.h"
14 #include "workqueue.h"
15
16 struct server {
17 struct event_base *base;
18 struct evdns_base *evdns_base;
19
20 pthread_mutex_t listeners_mutex;
21 struct evconnlistener **listeners;
22 size_t listeners_allocated;
23 size_t listeners_used;
24
25 SSL_CTX *ssl_ctx;
26
27 struct database db;
28
29 /* a collection of all connections */
30 struct connections connections;
31
32 /* worker thread wrangler */
33 struct workqueue workqueue;
34
35 /* server lua context, currently to load and parse config file */
36 lua_State *L;
37 };
38
39 /* each worker thread gets a reference to the server and its own lua state */
40 struct server_worker_context {
41 struct server *server;
42 lua_State *L;
43 };
44
45 struct server * server_new(void);
46
47 int server_init(struct server *s, char *conf_file);
48
49 void server_free(struct server *s);
50
51 void server_heartbeat_event(evutil_socket_t, short, void *);
52
53 int server_refresh_ssl_context(lua_State *, struct server *);
54
55 #endif /* SERVER_H */