-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathChannel.h
54 lines (50 loc) · 1.49 KB
/
Channel.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#pragma once
#include <functional>
// 定义函数指针
// typedef int(*handleFunc)(void* arg);
// using handleFunc = int(*)(void*);
// 定义文件描述符的读写事件
enum class FDEvent
{
TimeOut = 0x01,
ReadEvent = 0x02,
WriteEvent = 0x04
};
// 可调用对象包装器打包的是什么? 1. 函数指针 2. 可调用对象(可以向函数一样使用)
// 最终得到了地址, 但是没有调用
class Channel
{
public:
// 起别名
using handleFunc = std::function<int(void*)>;
// 构造函数,函数的第3/4/5个参数是个可调用对象的包装器类型(类似函数指针),使得可调用对象可以像普通函数一样被调用
Channel(int fd, FDEvent events, handleFunc readFunc, handleFunc writeFunc, handleFunc destroyFunc, void* arg);
// 回调函数
handleFunc readCallback;
handleFunc writeCallback;
handleFunc destroyCallback;
// 修改fd的写事件(检测 or 不检测)
void writeEventEnable(bool flag);
// 判断是否需要检测文件描述符的写事件
bool isWriteEventEnable();
// 取出私有成员的值(接口)
inline int getEvent()
{
return m_events;
}
inline int getSocket()
{
return m_fd;
}
inline const void* getArg()
{
return m_arg;
}
private:
// 文件描述符
int m_fd; // 事件的文件描述符
// 事件
int m_events;
// 回调函数的参数
void* m_arg;
};