aboutsummaryrefslogtreecommitdiff
path: root/src/server.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/server.h')
-rw-r--r--src/server.h46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/server.h b/src/server.h
new file mode 100644
index 0000000..69c3ad7
--- /dev/null
+++ b/src/server.h
@@ -0,0 +1,46 @@
+#ifndef POTD_SERVER_H
+#define POTD_SERVER_H 1
+
+#include "socket.h"
+
+typedef struct server_data {
+ void *data;
+} server_data;
+
+typedef struct server_session {
+ void *data;
+} server_session;
+
+typedef int (*on_connect_cb) (struct server_data *data, struct server_session *ses);
+typedef int (*on_disconnect_cb) (struct server_data *data, struct server_session *ses);
+typedef int (*on_data_cb) (struct server_data *data, struct server_session *ses);
+typedef int (*on_free_cb) (struct server_data *data);
+typedef int (*on_listen_cb) (struct server_data *data);
+typedef int (*on_shutdown_cb) (struct server_data *data);
+
+typedef struct server_callbacks {
+ on_connect_cb on_connect;
+ on_disconnect_cb on_disconnect;
+ on_data_cb mainloop;
+ on_free_cb on_free;
+ on_listen_cb on_listen;
+ on_shutdown_cb on_shutdown;
+} server_callbacks;
+
+typedef struct server_ctx {
+ server_callbacks server_cbs;
+ server_data server_dat;
+ psocket sock;
+} server_ctx;
+
+typedef int (*init_cb) (struct server_ctx *ctx);
+
+
+server_ctx *
+server_init_ctx(server_ctx *ctx, init_cb init_fn);
+
+int server_validate_ctx(server_ctx *ctx);
+
+int server_mainloop(server_ctx *ctx);
+
+#endif