From e31561bcd34905990fb89725fb415e4a2e50ae31 Mon Sep 17 00:00:00 2001 From: Theis Pieter Hollebeek Date: Wed, 25 Mar 2026 21:16:54 +0100 Subject: [PATCH] move register code into event mgr --- backend/src/event_loop.hpp | 16 +++++++++++++++- backend/src/server.cpp | 22 +++++++--------------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/backend/src/event_loop.hpp b/backend/src/event_loop.hpp index aac3358..f2680de 100644 --- a/backend/src/event_loop.hpp +++ b/backend/src/event_loop.hpp @@ -1,5 +1,7 @@ #pragma once +#include "errno_shim.hpp" #include "result.hpp" +#include namespace mst::event { enum Variant { Server, Client }; struct Event { @@ -23,10 +25,22 @@ template auto make_event(Variant variant, Data data) -> Event* class Manager { public: auto start() -> Result; - int epoll_fd; + template + auto register_event(Variant variant, Data data, int fd) -> Result + { + auto poll_event = epoll_event { .events = EPOLLIN, + .data = { .ptr = make_event(variant, data) } }; + + if (::epoll_ctl(this->epoll_fd, EPOLL_CTL_ADD, fd, &poll_event) < 0) { + return std::unexpected( + errno_shim("could not add listener to epoll")); + } + return { }; + } static auto create() -> Result; private: + int epoll_fd; Manager(int epoll_fd) : epoll_fd(epoll_fd) { }; }; diff --git a/backend/src/server.cpp b/backend/src/server.cpp index b1ea4cb..96e4bb2 100644 --- a/backend/src/server.cpp +++ b/backend/src/server.cpp @@ -29,12 +29,9 @@ auto Server::bind(mst::event::Manager& mgr, const std::string& host, return std::unexpected(x.error()); } auto listener = x.value(); - auto context = event::make_event(event::Server, Server(listener)); - auto poll_event - = epoll_event { .events = EPOLLIN, .data = { .ptr = context } }; - if (::epoll_ctl(mgr.epoll_fd, EPOLL_CTL_ADD, listener.fd, &poll_event) - < 0) { - return std::unexpected(errno_shim("could not add listener to epoll")); + auto res = mgr.register_event(event::Server, Server(listener), listener.fd); + if (!res) { + return std::unexpected(res.error()); } return { }; } @@ -44,16 +41,11 @@ auto Server::wake(event::Manager& mgr) -> Result auto x = this->listener.accept(); auto connection = x.value(); - auto context - = event::make_event(event::Client, mst::Client(*this, connection)); + auto res = mgr.register_event( + event::Client, mst::Client(*this, connection), connection.fd); - auto poll_event - = epoll_event { .events = EPOLLIN, .data = { .ptr = context } }; - - if (::epoll_ctl(mgr.epoll_fd, EPOLL_CTL_ADD, connection.fd, &poll_event) - < 0) { - return std::unexpected( - mst::errno_shim("could not add connection to epoll")); + if (!res) { + return std::unexpected(res.error()); } return { }; }