Mercurial
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