49 lines
1.3 KiB
C++
49 lines
1.3 KiB
C++
#pragma once
|
|
#include "reactor.hpp"
|
|
#include <functional>
|
|
#include <sys/epoll.h>
|
|
|
|
namespace tinyrpc {
|
|
|
|
|
|
enum class IOEvent{
|
|
READ = EPOLLIN,
|
|
WRITE = EPOLLOUT,
|
|
// ERROR = EPOLLERR
|
|
};
|
|
|
|
|
|
class FdEvent {
|
|
|
|
public:
|
|
FdEvent() = default;
|
|
~FdEvent();
|
|
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);
|
|
|
|
protected:
|
|
int m_fd {-1};
|
|
Reactor::Task m_read_callback{m_default_callback};
|
|
Reactor::Task m_write_callback{m_default_callback};
|
|
// std::function<void()> m_error_callback{nullptr};
|
|
Reactor* m_reactor{nullptr}; // 这个fd 所属的 reactor
|
|
int m_listen_events {0}; // 这个fd 关心的事件
|
|
|
|
static Reactor::Task m_default_callback;
|
|
};
|
|
|
|
|
|
} |