diff seobeo/examples/websocket_server_example.c @ 121:7b1719fa918c

[Seobeo] Added web socket server.
author June Park <parkjune1995@gmail.com>
date Thu, 08 Jan 2026 06:45:10 -0800
parents
children 7eb79fd91c7e
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/seobeo/examples/websocket_server_example.c	Thu Jan 08 06:45:10 2026 -0800
@@ -0,0 +1,73 @@
+#include "seobeo/seobeo.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+void Echo_Handler(Seobeo_WebSocket_Server_Connection *p_conn, Seobeo_WebSocket_Message *p_msg, void *p_user_data)
+{
+  (void)p_user_data;
+
+  if (p_msg->opcode == SEOBEO_WS_OPCODE_TEXT)
+  {
+    printf("[Echo] Received text: %.*s\n", (int)p_msg->length, (char*)p_msg->data);
+    Seobeo_WebSocket_Server_Send_Text(p_conn, (char*)p_msg->data);
+  }
+  else if (p_msg->opcode == SEOBEO_WS_OPCODE_BINARY)
+  {
+    printf("[Echo] Received %zu bytes of binary data\n", p_msg->length);
+    Seobeo_WebSocket_Server_Send_Binary(p_conn, p_msg->data, p_msg->length);
+  }
+}
+
+void Chat_Handler(Seobeo_WebSocket_Server_Connection *p_conn, Seobeo_WebSocket_Message *p_msg, void *p_user_data)
+{
+  (void)p_user_data;
+
+  if (p_msg->opcode == SEOBEO_WS_OPCODE_TEXT)
+  {
+    char message[2048];
+    snprintf(message, sizeof(message), "[%s]: %.*s", p_conn->client_id, (int)p_msg->length, (char*)p_msg->data);
+
+    printf("[Chat] Broadcasting: %s\n", message);
+    Seobeo_WebSocket_Server_Broadcast_Text(message);
+  }
+}
+
+void Binary_Handler(Seobeo_WebSocket_Server_Connection *p_conn, Seobeo_WebSocket_Message *p_msg, void *p_user_data)
+{
+  (void)p_user_data;
+  (void)p_conn;
+
+  if (p_msg->opcode == SEOBEO_WS_OPCODE_BINARY)
+  {
+    printf("[Binary] Received %zu bytes, broadcasting to all clients\n", p_msg->length);
+    Seobeo_WebSocket_Server_Broadcast_Binary(p_msg->data, p_msg->length);
+  }
+}
+
+int main()
+{
+  printf("=== Seobeo WebSocket Server Example ===\n\n");
+
+  Seobeo_WebSocket_Server_Init();
+
+  Seobeo_WebSocket_Server_Register("/echo", Echo_Handler, NULL);
+  printf("Registered /echo endpoint\n");
+
+  Seobeo_WebSocket_Server_Register("/chat", Chat_Handler, NULL);
+  printf("Registered /chat endpoint\n");
+
+  Seobeo_WebSocket_Server_Register("/binary", Binary_Handler, NULL);
+  printf("Registered /binary endpoint\n");
+
+  printf("\nStarting server on port 8080...\n");
+  printf("\nTest with:\n");
+  printf("  ws://localhost:8080/echo   - Echo server\n");
+  printf("  ws://localhost:8080/chat   - Chat room\n");
+  printf("  ws://localhost:8080/binary - Binary data broadcast\n");
+  printf("\n");
+
+  Seobeo_Web_Server_Start(NULL, "8080", SEOBEO_MODE_FORK, 0);
+
+  return 0;
+}