diff --git a/include/ouc_server/epoll/epoll_loop.cpp b/include/ouc_server/epoll/epoll_loop.cpp new file mode 100644 index 0000000..eb48fc6 --- /dev/null +++ b/include/ouc_server/epoll/epoll_loop.cpp @@ -0,0 +1,32 @@ +#include + +#include +#include +#include +#include + +namespace ouc_server +{ + namespace epoll + { + + EpollLoop::EpollLoop() + { + epoll_fd = epoll_create1(0); + } + + EpollLoop::~EpollLoop() + { + close(epoll_fd); + } + + bool EpollLoop::add_fd(int fd, uint32_t event_flags, std::function callback) + { + struct epoll_event ev; + ev.events = event_flags; + ev.data.fd = fd; + epoll_ctl(epoll_fd, EPOLL_CTL_ADD, fd, &ev); + events_map[fd] = Event{fd, event_flags, callback}; + } + } +} \ No newline at end of file diff --git a/include/ouc_server/epoll/epoll_loop.hpp b/include/ouc_server/epoll/epoll_loop.hpp new file mode 100644 index 0000000..84ae087 --- /dev/null +++ b/include/ouc_server/epoll/epoll_loop.hpp @@ -0,0 +1,41 @@ +#ifndef INCLUDE_OUC_SERVER_EPOLL_LOOP +#define INCLUDE_OUC_SERVER_EPOLL_LOOP + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace ouc_server +{ + namespace epoll + { + struct Event + { + int fd; + uint32_t events; + std::function callback; + }; + + class EpollLoop + { + private: + int epoll_fd; + std::unordered_map events_map; + + public: + EpollLoop(); + + ~EpollLoop(); + + public: + bool add_fd(int, uint32_t, std::function); + }; + } +} + +#endif // INCLUDE_OUC_SERVER_EPOLL_LOOP \ No newline at end of file