mirror of
https://github.com/Mercantec-GHC/h5-projekt-mst.git
synced 2026-08-26 21:27:38 +02:00
move register_event to cpp file
This commit is contained in:
parent
d3ad2a9429
commit
c0df2ec112
@ -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 poll_event = epoll_event { .events = EPOLLIN, .data = { } };
|
||||
|
||||
@ -33,7 +33,7 @@ namespace event {
|
||||
};
|
||||
|
||||
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)));
|
||||
}
|
||||
@ -41,22 +41,8 @@ namespace event {
|
||||
class Manager {
|
||||
public:
|
||||
auto start() -> Result<void>;
|
||||
template <typename Data>
|
||||
auto register_event(Data&& data, int fd) -> 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 register_event(std::unique_ptr<Event> event, int fd)
|
||||
-> Result<void>;
|
||||
auto deregister_event(int fd) -> Result<void>;
|
||||
static auto create() -> Result<Manager>;
|
||||
|
||||
|
||||
@ -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 x = mst::Server::bind(mgr, "0.0.0.0", PORT);
|
||||
if (!x) {
|
||||
|
||||
@ -32,7 +32,8 @@ auto Server::bind(
|
||||
return std::unexpected(x.error());
|
||||
}
|
||||
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) {
|
||||
return std::unexpected(res.error());
|
||||
}
|
||||
@ -44,8 +45,8 @@ auto Server::wake(event::Manager& mgr) -> Result<void>
|
||||
auto x = this->listener.accept();
|
||||
auto connection = x.value();
|
||||
|
||||
auto res
|
||||
= mgr.register_event(mst::Client(*this, connection), connection.fd);
|
||||
auto res = mgr.register_event(
|
||||
event::make_event(mst::Client(*this, connection)), connection.fd);
|
||||
|
||||
if (!res) {
|
||||
return std::unexpected(res.error());
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user