Mercurial
diff seobeo/os/s_macos_edge.c @ 7:114cad94008f
[Seobeo] Updated to support thread and edge server calls.
| author | June Park <parkjune1995@gmail.com> |
|---|---|
| date | Mon, 29 Sep 2025 17:00:38 -0700 |
| parents | |
| children | fb2cff495a60 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/seobeo/os/s_macos_edge.c Mon Sep 29 17:00:38 2025 -0700 @@ -0,0 +1,70 @@ +#include <sys/event.h> +#include "seobeo/seobeo.h" + + +void *Seobeo_Web_Edge_Worker(void *vargs) +{ + WorkerArgs *args = vargs; + struct kevent evlist[64]; + while (1) { + int ne = kevent(args->evfd, NULL, 0, evlist, 64, NULL); + if (ne < 0) continue; + for (int i = 0; i < ne; i++) { + Seobeo_PHandle h = evlist[i].udata; + if (h == args->srv) { + Seobeo_PHandle cli = + Seobeo_Stream_Handle_Accept(args->srv); + if (!cli) continue; + struct kevent kev = { + .ident = cli->socket, + .filter = EVFILT_READ, + .flags = EV_ADD, + .udata = cli + }; + kevent(args->evfd, &kev, 1, NULL, 0, NULL); + } else { + Seobeo_Web_HandleClientRequest(h, args->cache); + struct kevent kev = { + .ident = h->socket, + .filter = EVFILT_READ, + .flags = EV_DELETE, + }; + kevent(args->evfd, &kev, 1, NULL, 0, NULL); + Seobeo_Handle_Destroy(h); + } + } + } + return NULL; +} + +void Seobeo_Web_Edge( + Seobeo_PHandle p_server_handle, + int thread_count, + Dowa_PHashMap p_html_cache) +{ + int kq = kqueue(); + struct kevent kev = { + .ident = p_server_handle->socket, + .filter = EVFILT_READ, + .flags = EV_ADD, + .udata = p_server_handle + }; + kevent(kq, &kev, 1, NULL, 0, NULL); + + pthread_attr_t attr; + pthread_attr_init(&attr); + pthread_attr_setstacksize(&attr, 100 * 1024 * 1024); // 100 MB + + pthread_t threads[thread_count]; + WorkerArgs args = { p_server_handle, p_html_cache, kq }; + for (int i = 0; i < thread_count; i++) + { + pthread_create(&threads[i], NULL, + Seobeo_Web_Edge_Worker, &args); + } + for (int i = 0; i < thread_count; i++) + { + pthread_join(threads[i], NULL); + } + return; +}