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