move register_event to cpp file

This commit is contained in:
sfja 2026-04-08 11:58:21 +02:00
parent d3ad2a9429
commit c0df2ec112
4 changed files with 20 additions and 23 deletions

View File

@ -67,6 +67,19 @@ auto Manager::start() -> Result<void>
} }
} }
auto Manager::register_event(std::unique_ptr<Event> event, int fd)
-> Result<void>
{
this->events.emplace_back(std::move(event));
auto poll_event = epoll_event { .events = EPOLLIN,
.data = { .ptr = events.back().get() } };
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 { };
}
auto Manager::deregister_event(int fd) -> Result<void> auto Manager::deregister_event(int fd) -> Result<void>
{ {
auto poll_event = epoll_event { .events = EPOLLIN, .data = { } }; auto poll_event = epoll_event { .events = EPOLLIN, .data = { } };

View File

@ -33,7 +33,7 @@ namespace event {
}; };
template <typename Data> template <typename Data>
auto make_event(Data&& data) -> std::unique_ptr<Event> static auto make_event(Data&& data) -> std::unique_ptr<Event>
{ {
return std::make_unique<Event>(std::make_unique<Data>(std::move(data))); return std::make_unique<Event>(std::make_unique<Data>(std::move(data)));
} }
@ -41,22 +41,8 @@ namespace event {
class Manager { class Manager {
public: public:
auto start() -> Result<void>; auto start() -> Result<void>;
template <typename Data> auto register_event(std::unique_ptr<Event> event, int fd)
auto register_event(Data&& data, int fd) -> Result<void> -> Result<void>;
{
auto event = make_event(std::move(data));
this->events.emplace_back(std::move(event));
auto poll_event = epoll_event { .events = EPOLLIN,
.data = { .ptr = events.back().get() } };
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 { };
}
auto deregister_event(int fd) -> Result<void>; auto deregister_event(int fd) -> Result<void>;
static auto create() -> Result<Manager>; static auto create() -> Result<Manager>;

View File

@ -64,9 +64,6 @@ int main(void)
} }
}); });
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
mqtt_client.publish("/", "published from c++");
auto mgr = mst::event::Manager::create().value(); auto mgr = mst::event::Manager::create().value();
auto x = mst::Server::bind(mgr, "0.0.0.0", PORT); auto x = mst::Server::bind(mgr, "0.0.0.0", PORT);
if (!x) { if (!x) {

View File

@ -32,7 +32,8 @@ auto Server::bind(
return std::unexpected(x.error()); return std::unexpected(x.error());
} }
auto listener = x.value(); auto listener = x.value();
auto res = mgr.register_event(Server(listener), listener.fd); auto res
= mgr.register_event(event::make_event(Server(listener)), listener.fd);
if (!res) { if (!res) {
return std::unexpected(res.error()); return std::unexpected(res.error());
} }
@ -44,8 +45,8 @@ auto Server::wake(event::Manager& mgr) -> Result<void>
auto x = this->listener.accept(); auto x = this->listener.accept();
auto connection = x.value(); auto connection = x.value();
auto res auto res = mgr.register_event(
= mgr.register_event(mst::Client(*this, connection), connection.fd); event::make_event(mst::Client(*this, connection)), connection.fd);
if (!res) { if (!res) {
return std::unexpected(res.error()); return std::unexpected(res.error());