#pragma once #include "reactor.hpp" #include #include namespace tinyrpc { enum class IOEvent{ READ = EPOLLIN, WRITE = EPOLLOUT, // ERROR = EPOLLERR }; class FdEvent { public: FdEvent() = default; FdEvent(int fd); FdEvent(int fd, Reactor* reactor); int getFd() const{return m_fd;} int getEvent() const { return m_listen_events;} void setReadCallback(std::function read_callback) { m_read_callback = read_callback; } void setWriteCallback(std::function write_callback) { m_write_callback = write_callback; } bool setNonblock(); std::function getHandler(IOEvent event) const; void addListenEvent(IOEvent event); void delListenEvent(IOEvent event); protected: int m_fd {-1}; Reactor::Task m_read_callback{m_default_callback}; Reactor::Task m_write_callback{m_default_callback}; // std::function m_error_callback{nullptr}; Reactor* m_reactor{nullptr}; // 这个fd 所属的 reactor int m_listen_events {0}; // 这个fd 关心的事件 static Reactor::Task m_default_callback; }; }