From f6aa26cb6489338c66c07cea14f2892eec88cb01 Mon Sep 17 00:00:00 2001 From: Aki Date: Tue, 7 Jul 2020 17:47:21 +0200 Subject: Preparations to completely separate execution-related from plop itself --- main.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 main.c (limited to 'main.c') diff --git a/main.c b/main.c new file mode 100644 index 0000000..af36c5d --- /dev/null +++ b/main.c @@ -0,0 +1,58 @@ +#include +#include + +#include +#include +#include + +#include "plop.h" + +/// Standard entry point for the program. +/// \param argc Argument count +/// \param argv Argument array +/// \return Error code +int main(int argc, char ** argv) +{ + lua_State * L = luaL_newstate(); + luaL_openlibs(L); + + if (3 != argc) + { + return 1; // TODO: Document error codes/print usage information + } + + if (LUA_OK != luaL_dofile(L, argv[2])) + { + return 2; // TODO: Document error codes/print usage information + } + + static const int max_clients = 200; + + int fdc = 0; + struct request * requests[max_clients]; + struct pollfd fdv[max_clients]; + + memset(requests, 0, sizeof(requests)); + memset(fdv, 0, sizeof(fdv)); + + fdv[0].fd = make_server(NULL, argv[1]); + fdv[0].events = POLLIN; + fdc++; + + if (-1 == fdv[0].fd) + { + return 1; // TODO: Document error codes/print usage information + } + + while (0 < fdc && -1 != poll(fdv, fdc, -1)) + { + int shift_by = 0; + + for (int i = 1; i < fdc; ++i) + { + shift_by = handle_client(L, &fdv[i], &requests[i], shift_by); + } + + fdc = handle_server(fdv, fdc - shift_by, max_clients); + } +} -- cgit v1.1