Mercurial
annotate seobeo/docs/web_socket_client.md @ 279:b3b547563ec7
Add Google connector service and agent wiki
Implement the C/Seobeo Google Drive and Gmail connector with encrypted OAuth storage, Zenbu authentication, browser testing, AI tool discovery, chunked HTTP decoding, and Bazel coverage. Consolidate repository guidance into progressive wiki documentation and enforce arena-first allocation for new first-party C code.
Co-authored-by: Copilot <[email protected]>
Copilot-Session: 84c338fd-0939-4bb3-b7f3-1062eb213e5d
| author | MrJuneJune <me@mrjunejune.com> |
|---|---|
| date | Mon, 17 Aug 2026 22:22:36 -0700 |
| parents | cbbf78b17cfa |
| children |
| rev | line source |
|---|---|
|
120
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
1 # Seobeo WebSocket Client - Usage Guide |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
2 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
3 A clean, easy-to-use WebSocket client library following RFC 6455. |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
4 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
5 ## Features |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
6 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
7 1. **WebSocket Protocol Support**: Full RFC 6455 WebSocket implementation |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
8 2. **Text and Binary Messages**: Send/receive both text and binary data |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
9 3. **Automatic Ping/Pong**: Automatic pong responses to ping frames |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
10 4. **Message Fragmentation**: Handles fragmented messages automatically |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
11 5. **Secure WebSocket**: Supports both `ws://` and `wss://` (WebSocket over TLS) |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
12 6. **Clean API**: Simple, intuitive API following seobeo coding standards |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
13 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
14 ## API Overview |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
15 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
16 ### Core Functions |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
17 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
18 ```c |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
19 // Connect to WebSocket server |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
20 Seobeo_WebSocket *Seobeo_WebSocket_Connect(const char *url); |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
21 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
22 // Send messages |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
23 int32 Seobeo_WebSocket_Send_Text(Seobeo_WebSocket *p_ws, const char *text); |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
24 int32 Seobeo_WebSocket_Send_Binary(Seobeo_WebSocket *p_ws, const uint8 *data, size_t length); |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
25 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
26 // Send control frames |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
27 int32 Seobeo_WebSocket_Send_Ping(Seobeo_WebSocket *p_ws, const char *payload); |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
28 int32 Seobeo_WebSocket_Send_Pong(Seobeo_WebSocket *p_ws, const char *payload); |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
29 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
30 // Receive messages |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
31 Seobeo_WebSocket_Message *Seobeo_WebSocket_Receive(Seobeo_WebSocket *p_ws); |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
32 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
33 // Close connection |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
34 int32 Seobeo_WebSocket_Close(Seobeo_WebSocket *p_ws, uint16 code, const char *reason); |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
35 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
36 // Clean up |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
37 void Seobeo_WebSocket_Message_Destroy(Seobeo_WebSocket_Message *p_msg); |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
38 void Seobeo_WebSocket_Destroy(Seobeo_WebSocket *p_ws); |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
39 ``` |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
40 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
41 ### Message Opcodes |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
42 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
43 ```c |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
44 typedef enum { |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
45 SEOBEO_WS_OPCODE_CONTINUATION = 0x0, // Continuation frame |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
46 SEOBEO_WS_OPCODE_TEXT = 0x1, // Text message |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
47 SEOBEO_WS_OPCODE_BINARY = 0x2, // Binary message |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
48 SEOBEO_WS_OPCODE_CLOSE = 0x8, // Close connection |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
49 SEOBEO_WS_OPCODE_PING = 0x9, // Ping frame |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
50 SEOBEO_WS_OPCODE_PONG = 0xA // Pong frame |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
51 } Seobeo_WebSocket_Opcode; |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
52 ``` |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
53 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
54 ### Connection States |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
55 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
56 ```c |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
57 typedef enum { |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
58 SEOBEO_WS_STATE_CONNECTING = 0, // Handshake in progress |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
59 SEOBEO_WS_STATE_OPEN, // Connection established |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
60 SEOBEO_WS_STATE_CLOSING, // Close handshake initiated |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
61 SEOBEO_WS_STATE_CLOSED // Connection closed |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
62 } Seobeo_WebSocket_State; |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
63 ``` |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
64 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
65 ## Examples |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
66 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
67 ### 1. Simple Text Echo |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
68 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
69 ```c |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
70 // Connect to WebSocket server |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
71 Seobeo_WebSocket *p_ws = Seobeo_WebSocket_Connect("wss://echo.websocket.org"); |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
72 if (!p_ws) |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
73 { |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
74 printf("Failed to connect\n"); |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
75 return; |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
76 } |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
77 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
78 // Send text message |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
79 const char *message = "Hello, WebSocket!"; |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
80 Seobeo_WebSocket_Send_Text(p_ws, message); |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
81 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
82 // Receive echo response |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
83 Seobeo_WebSocket_Message *p_msg = Seobeo_WebSocket_Receive(p_ws); |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
84 if (p_msg && p_msg->opcode == SEOBEO_WS_OPCODE_TEXT) |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
85 { |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
86 printf("Received: %.*s\n", (int)p_msg->length, (char*)p_msg->data); |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
87 Seobeo_WebSocket_Message_Destroy(p_msg); |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
88 } |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
89 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
90 // Close connection |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
91 Seobeo_WebSocket_Close(p_ws, 1000, "Normal closure"); |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
92 Seobeo_WebSocket_Destroy(p_ws); |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
93 ``` |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
94 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
95 ### 2. Binary Data Transfer |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
96 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
97 ```c |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
98 Seobeo_WebSocket *p_ws = Seobeo_WebSocket_Connect("wss://example.com/data"); |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
99 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
100 // Send binary data |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
101 uint8 data[] = {0x01, 0x02, 0x03, 0xAA, 0xBB, 0xCC}; |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
102 Seobeo_WebSocket_Send_Binary(p_ws, data, sizeof(data)); |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
103 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
104 // Receive binary response |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
105 Seobeo_WebSocket_Message *p_msg = Seobeo_WebSocket_Receive(p_ws); |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
106 if (p_msg && p_msg->opcode == SEOBEO_WS_OPCODE_BINARY) |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
107 { |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
108 printf("Received %zu bytes\n", p_msg->length); |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
109 // Process binary data... |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
110 Seobeo_WebSocket_Message_Destroy(p_msg); |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
111 } |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
112 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
113 Seobeo_WebSocket_Destroy(p_ws); |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
114 ``` |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
115 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
116 ### 3. Chat Application |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
117 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
118 ```c |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
119 Seobeo_WebSocket *p_ws = Seobeo_WebSocket_Connect("wss://chat.example.com"); |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
120 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
121 // Send chat message |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
122 Seobeo_WebSocket_Send_Text(p_ws, "Hello everyone!"); |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
123 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
124 // Continuous receive loop |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
125 while (1) |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
126 { |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
127 Seobeo_WebSocket_Message *p_msg = Seobeo_WebSocket_Receive(p_ws); |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
128 if (p_msg) |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
129 { |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
130 if (p_msg->opcode == SEOBEO_WS_OPCODE_TEXT) |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
131 { |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
132 printf("Chat: %.*s\n", (int)p_msg->length, (char*)p_msg->data); |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
133 } |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
134 Seobeo_WebSocket_Message_Destroy(p_msg); |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
135 } |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
136 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
137 usleep(10000); // 10ms sleep to avoid busy waiting |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
138 } |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
139 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
140 Seobeo_WebSocket_Destroy(p_ws); |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
141 ``` |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
142 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
143 ### 4. Ping/Pong Keep-Alive |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
144 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
145 ```c |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
146 Seobeo_WebSocket *p_ws = Seobeo_WebSocket_Connect("wss://api.example.com"); |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
147 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
148 // Send ping to keep connection alive |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
149 Seobeo_WebSocket_Send_Ping(p_ws, "keep-alive"); |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
150 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
151 // Server will automatically receive pong responses |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
152 // (pong responses are handled internally) |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
153 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
154 Seobeo_WebSocket_Destroy(p_ws); |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
155 ``` |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
156 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
157 ### 5. Handling Different Message Types |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
158 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
159 ```c |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
160 Seobeo_WebSocket *p_ws = Seobeo_WebSocket_Connect("wss://example.com"); |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
161 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
162 while (1) |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
163 { |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
164 Seobeo_WebSocket_Message *p_msg = Seobeo_WebSocket_Receive(p_ws); |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
165 if (p_msg) |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
166 { |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
167 switch (p_msg->opcode) |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
168 { |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
169 case SEOBEO_WS_OPCODE_TEXT: |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
170 printf("Text: %.*s\n", (int)p_msg->length, (char*)p_msg->data); |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
171 break; |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
172 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
173 case SEOBEO_WS_OPCODE_BINARY: |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
174 printf("Binary: %zu bytes\n", p_msg->length); |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
175 break; |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
176 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
177 default: |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
178 printf("Unknown opcode: 0x%X\n", p_msg->opcode); |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
179 break; |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
180 } |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
181 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
182 Seobeo_WebSocket_Message_Destroy(p_msg); |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
183 } |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
184 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
185 usleep(10000); |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
186 } |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
187 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
188 Seobeo_WebSocket_Destroy(p_ws); |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
189 ``` |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
190 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
191 ### 6. Graceful Shutdown |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
192 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
193 ```c |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
194 Seobeo_WebSocket *p_ws = Seobeo_WebSocket_Connect("wss://example.com"); |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
195 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
196 // Do work... |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
197 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
198 // Close with custom status code and reason |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
199 Seobeo_WebSocket_Close(p_ws, 1000, "Client shutting down"); |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
200 Seobeo_WebSocket_Destroy(p_ws); |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
201 ``` |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
202 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
203 ## WebSocket Close Codes |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
204 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
205 Common close status codes (RFC 6455): |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
206 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
207 - **1000**: Normal closure |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
208 - **1001**: Going away (e.g., server shutdown, browser navigation) |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
209 - **1002**: Protocol error |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
210 - **1003**: Unsupported data type |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
211 - **1006**: Abnormal closure (no close frame received) |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
212 - **1007**: Invalid frame payload data |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
213 - **1008**: Policy violation |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
214 - **1009**: Message too big |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
215 - **1010**: Mandatory extension missing |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
216 - **1011**: Internal server error |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
217 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
218 ## Building |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
219 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
220 ### Build the library: |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
221 ```bash |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
222 bazel build //seobeo:seobeo_client |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
223 ``` |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
224 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
225 ### Build and run the WebSocket test: |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
226 ```bash |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
227 bazel test //seobeo:seobeo_websocket_test |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
228 ``` |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
229 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
230 ## Message Structure |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
231 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
232 ```c |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
233 typedef struct { |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
234 Seobeo_WebSocket_Opcode opcode; // Message type |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
235 uint8 *data; // Message payload |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
236 size_t length; // Payload length |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
237 boolean is_final; // Final fragment flag |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
238 } Seobeo_WebSocket_Message; |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
239 ``` |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
240 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
241 ## Protocol Details |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
242 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
243 The implementation follows RFC 6455: |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
244 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
245 1. **Handshake**: HTTP Upgrade request with `Sec-WebSocket-Key` |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
246 2. **Frame Format**: Proper FIN, opcode, mask, and payload length handling |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
247 3. **Masking**: All client-to-server frames are masked (required by RFC) |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
248 4. **Fragmentation**: Handles fragmented messages across multiple frames |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
249 5. **Control Frames**: Proper handling of ping, pong, and close frames |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
250 6. **TLS Support**: Supports secure WebSocket (wss://) via OpenSSL |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
251 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
252 ## Coding Standards |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
253 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
254 The implementation follows your specified coding standards: |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
255 - Naming: `Seobeo_WebSocket_Connect`, `Seobeo_WebSocket_Send_Text` |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
256 - Two spaces for indentation |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
257 - New line before `{` unless it's a struct |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
258 - Single statement: no need for `{}` |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
259 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
260 ## Features |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
261 |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
262 ✅ WebSocket handshake (HTTP Upgrade) |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
263 ✅ Text and binary message support |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
264 ✅ Automatic masking for client frames |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
265 ✅ Message fragmentation handling |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
266 ✅ Ping/Pong frames |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
267 ✅ Close handshake |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
268 ✅ TLS/SSL support (wss://) |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
269 ✅ Non-blocking receive |
|
cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
June Park <parkjune1995@gmail.com>
parents:
diff
changeset
|
270 ✅ Proper memory management with arenas |