rough framework
[lemu] / server.h
diff --git a/server.h b/server.h
new file mode 100644 (file)
index 0000000..e4b0705
--- /dev/null
+++ b/server.h
@@ -0,0 +1,55 @@
+#ifndef SERVER_H
+#define SERVER_H
+
+#include <event2/listener.h>
+#include <event2/util.h>
+
+#include <openssl/ssl.h>
+
+#include <lua.h>
+
+#include "common.h"
+#include "connections.h"
+#include "db.h"
+#include "workqueue.h"
+
+struct server {
+       struct event_base *base;
+       struct evdns_base *evdns_base;
+
+       pthread_mutex_t listeners_mutex;
+       struct evconnlistener **listeners;
+       size_t listeners_allocated;
+       size_t listeners_used;
+
+       SSL_CTX *ssl_ctx;
+
+       struct database db;
+
+       /* a collection of all connections */
+       struct connections connections;
+
+       /* worker thread wrangler */
+       struct workqueue workqueue;
+
+       /* server lua context, currently to load and parse config file */
+       lua_State *L;
+};
+
+/* each worker thread gets a reference to the server and its own lua state */
+struct server_worker_context {
+       struct server *server;
+       lua_State *L;
+};
+
+struct server * server_new(void);
+
+int server_init(struct server *s, char *conf_file);
+
+void server_free(struct server *s);
+
+void server_heartbeat_event(evutil_socket_t, short, void *);
+
+int server_refresh_ssl_context(lua_State *, struct server *);
+
+#endif /* SERVER_H */
\ No newline at end of file