diff seobeo/seobeo_internal.h @ 121:7b1719fa918c

[Seobeo] Added web socket server.
author June Park <parkjune1995@gmail.com>
date Thu, 08 Jan 2026 06:45:10 -0800
parents cbbf78b17cfa
children f236c895604e
line wrap: on
line diff
--- a/seobeo/seobeo_internal.h	Thu Jan 08 03:19:59 2026 -0800
+++ b/seobeo/seobeo_internal.h	Thu Jan 08 06:45:10 2026 -0800
@@ -11,6 +11,10 @@
 #define SSL_TYPE void
 #endif
 
+// For web socket usages as body length are determine this...
+#define MAX_INT_16 65536
+#define MAX_FRAGMENT_SIZE 1024 * 1024 
+
 #include "dowa/dowa.h"
 #include <stdatomic.h>
 
@@ -183,7 +187,7 @@
   Dowa_Arena *p_arena;
 } Seobeo_WebSocket;
 
-// --- WebSocket Functions --- //
+// --- WebSocket Client Functions --- //
 extern Seobeo_WebSocket         *Seobeo_WebSocket_Connect(const char *url);
 extern int32                     Seobeo_WebSocket_Send_Text(Seobeo_WebSocket *p_ws, const char *text);
 extern int32                     Seobeo_WebSocket_Send_Binary(Seobeo_WebSocket *p_ws, const uint8 *data, size_t length);
@@ -194,4 +198,44 @@
 extern int32                     Seobeo_WebSocket_Close(Seobeo_WebSocket *p_ws, uint16 code, const char *reason);
 extern void                      Seobeo_WebSocket_Destroy(Seobeo_WebSocket *p_ws);
 
+// --- WebSocket Server Types --- //
+typedef struct Seobeo_WebSocket_Server_Connection_Struct Seobeo_WebSocket_Server_Connection;
+
+struct Seobeo_WebSocket_Server_Connection_Struct {
+  Seobeo_Handle *p_handle;
+  char          *client_id;
+  boolean        is_active;
+
+  uint8  *fragment_buffer;
+  size_t  fragment_length;
+  size_t  fragment_capacity;
+  Seobeo_WebSocket_Opcode fragment_opcode;
+
+  Seobeo_WebSocket_Server_Connection *next;
+};
+
+typedef void (*Seobeo_WebSocket_Server_Handler)(
+  Seobeo_WebSocket_Server_Connection *p_conn,
+  Seobeo_WebSocket_Message *p_msg,
+  void *p_user_data
+);
+
+typedef struct {
+  char                               *path;
+  Seobeo_WebSocket_Server_Handler     handler;
+  void                               *p_user_data;
+} Seobeo_WebSocket_Server_Route;
+
+// --- WebSocket Server Functions --- //
+extern void                               Seobeo_WebSocket_Server_Init();
+extern void                               Seobeo_WebSocket_Server_Register(const char *path, Seobeo_WebSocket_Server_Handler handler, void *p_user_data);
+extern boolean                            Seobeo_WebSocket_Server_Handle_Upgrade(Seobeo_Handle *p_handle, Seobeo_Request_Entry *p_req_map, const char *path);
+extern void                               Seobeo_WebSocket_Server_Handle_Connection(Seobeo_WebSocket_Server_Connection *p_conn);
+extern int32                              Seobeo_WebSocket_Server_Send_Text(Seobeo_WebSocket_Server_Connection *p_conn, const char *text);
+extern int32                              Seobeo_WebSocket_Server_Send_Binary(Seobeo_WebSocket_Server_Connection *p_conn, const uint8 *data, size_t length);
+extern void                               Seobeo_WebSocket_Server_Broadcast_Text(const char *text);
+extern void                               Seobeo_WebSocket_Server_Broadcast_Binary(const uint8 *data, size_t length);
+extern void                               Seobeo_WebSocket_Server_Connection_Close(Seobeo_WebSocket_Server_Connection *p_conn, uint16 code, const char *reason);
+extern void                               Seobeo_WebSocket_Server_Connection_Destroy(Seobeo_WebSocket_Server_Connection *p_conn);
+
 #endif