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 Manager::deregister_event(int fd) -> Result<void>
|
||||||
{
|
{
|
||||||
auto poll_event = epoll_event { .events = EPOLLIN, .data = { } };
|
auto poll_event = epoll_event { .events = EPOLLIN, .data = { } };
|
||||||
|
|||||||
@ -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>;
|
||||||
|
|
||||||
|
|||||||
@ -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) {
|
||||||
|
|||||||
@ -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());
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user