tinyrpc/includes/net/fd_event.hpp

48 lines
1.3 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>
2024-12-25 19:40:27 +08:00
2024-12-20 21:17:21 +08:00
namespace tinyrpc {
enum class IOEvent{
READ = EPOLLIN,
WRITE = EPOLLOUT,
// ERROR = EPOLLERR
};
class FdEvent {
2024-12-25 19:40:27 +08:00
2024-12-20 21:17:21 +08:00
public:
2024-12-25 19:40:27 +08:00
FdEvent() = default;
2024-12-20 21:17:21 +08:00
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);
2024-12-25 19:40:27 +08:00
protected:
2024-12-20 21:17:21 +08:00
int m_fd {-1};
2024-12-25 19:40:27 +08:00
Reactor::Task m_read_callback{m_default_callback};
Reactor::Task m_write_callback{m_default_callback};
2024-12-20 21:17:21 +08:00
// std::function<void()> m_error_callback{nullptr};
Reactor* m_reactor{nullptr}; // 这个fd 所属的 reactor
int m_listen_events {0}; // 这个fd 关心的事件
2024-12-25 19:40:27 +08:00
static Reactor::Task m_default_callback;
2024-12-20 21:17:21 +08:00
};
}