45 lines
1.2 KiB
C++
45 lines
1.2 KiB
C++
|
#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 关心的事件
|
||
|
};
|
||
|
|
||
|
|
||
|
}
|