Mercurial
diff seobeo/seobeo_internal.h @ 120:cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
| author | June Park <parkjune1995@gmail.com> |
|---|---|
| date | Thu, 08 Jan 2026 03:19:59 -0800 |
| parents | c39582f937e5 |
| children | 7b1719fa918c |
line wrap: on
line diff
--- a/seobeo/seobeo_internal.h Wed Jan 07 16:05:57 2026 -0800 +++ b/seobeo/seobeo_internal.h Thu Jan 08 03:19:59 2026 -0800 @@ -141,4 +141,57 @@ extern void Seobeo_Client_Request_Destroy(Seobeo_Client_Request *p_req); extern void Seobeo_Client_Response_Destroy(Seobeo_Client_Response *p_resp); +// --- WebSocket Types --- // +typedef enum { + SEOBEO_WS_OPCODE_CONTINUATION = 0x0, + SEOBEO_WS_OPCODE_TEXT = 0x1, + SEOBEO_WS_OPCODE_BINARY = 0x2, + SEOBEO_WS_OPCODE_CLOSE = 0x8, + SEOBEO_WS_OPCODE_PING = 0x9, + SEOBEO_WS_OPCODE_PONG = 0xA +} Seobeo_WebSocket_Opcode; + +typedef enum { + SEOBEO_WS_STATE_CONNECTING = 0, + SEOBEO_WS_STATE_OPEN, + SEOBEO_WS_STATE_CLOSING, + SEOBEO_WS_STATE_CLOSED +} Seobeo_WebSocket_State; + +typedef struct { + Seobeo_WebSocket_Opcode opcode; + uint8 *data; + size_t length; + boolean is_final; +} Seobeo_WebSocket_Message; + +typedef struct { + Seobeo_Handle *p_handle; + char *url; + char *host; + char *port; + char *path; + boolean use_tls; + + Seobeo_WebSocket_State state; + + uint8 *fragment_buffer; + size_t fragment_length; + size_t fragment_capacity; + Seobeo_WebSocket_Opcode fragment_opcode; + + Dowa_Arena *p_arena; +} Seobeo_WebSocket; + +// --- WebSocket 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); +extern int32 Seobeo_WebSocket_Send_Ping(Seobeo_WebSocket *p_ws, const char *payload); +extern int32 Seobeo_WebSocket_Send_Pong(Seobeo_WebSocket *p_ws, const char *payload); +extern Seobeo_WebSocket_Message *Seobeo_WebSocket_Receive(Seobeo_WebSocket *p_ws); +extern void Seobeo_WebSocket_Message_Destroy(Seobeo_WebSocket_Message *p_msg); +extern int32 Seobeo_WebSocket_Close(Seobeo_WebSocket *p_ws, uint16 code, const char *reason); +extern void Seobeo_WebSocket_Destroy(Seobeo_WebSocket *p_ws); + #endif