tinyrpc/includes/net/fd_event.hpp

45 lines
1.2 KiB
C++
Raw Normal View History

2024-12-20 21:17:21 +08:00
#pragma once
#include "reactor.hpp"
#include <functional>
#include <sys/epoll.h>
#include <unordered_map>
namespace tinyrpc {
enum class IOEvent{
READ = EPOLLIN,
WRITE = EPOLLOUT,
// ERROR = EPOLLERR
};
class FdEvent {
public:
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<void()> read_callback) {
m_read_callback = read_callback;
}
void setWriteCallback(std::function<void()> write_callback) {
m_write_callback = write_callback;
}
bool setNonblock();
std::function<void()> getHandler(IOEvent event) const;
void addListenEvent(IOEvent event);
void delListenEvent(IOEvent event);
private:
int m_fd {-1};
std::function<void()> m_read_callback{nullptr};
std::function<void()> m_write_callback{nullptr};
// std::function<void()> m_error_callback{nullptr};
Reactor* m_reactor{nullptr}; // 这个fd 所属的 reactor
int m_listen_events {0}; // 这个fd 关心的事件
};
}