代码拉取完成,页面将自动刷新
//
// Created by 22100 on 2024/4/18.
//
/* 模块功能
* 该模块分装了客户端连接的详细信息,包括文件描述符,事件类型以及对应的事件处理回调函数,便于服务器对每个客户端连接进行管理
*/
#ifndef REACTORHTTPCPP_CHANNEL_H
#define REACTORHTTPCPP_CHANNEL_H
#include <functional>
// 定义回调函数指针别名
//typedef int (*handleFunc)(void* arg);
// c11写法, 这种方式和上面方式都只能指向类的静态成员函数和普通全局函数, 不能指向类的成员函数(类的成员函数需要类创建出来才存在)
//using handleFunc = int(*)(void*);
// 定义强类型枚举(十六进制, int型)
enum class FDEvent{
TimeOut = 0X01,
ReadEvent = 0X02,
WriteEvent = 0X04
};
// 可调用对象包装器打包的是什么? 1. 函数指针 2. 可调用对象(可以向函数一样使用)
// 最终得到了地址, 但是没有调用
class Channel{
public:
using handleFunc = std::function<int(void*)>; // 定义可包装器类型别名
Channel(int fd, FDEvent events, handleFunc readFun, handleFunc writeFun, handleFunc destroyFun, void* arg);
handleFunc readCallback; // 读事件回调函数
handleFunc writeCallback; // 写事件回调函数
handleFunc destroyCallback; // 销毁事件回调函数
inline int getFd() const;
inline int getEvents() const;
inline const void* getArg() const;
void writeEventEnable(bool flag);
int isWriteEventsEnable() const;
private:
int fd; // 文件描述符
int events; // 事件
void* arg; // 回调函数参数
};
// 注意内联函数声明与定义必须在同一个文件中
inline int Channel::getFd() const {
return fd;
}
inline int Channel::getEvents() const {
return events;
}
inline const void* Channel::getArg() const{
return arg;
}
#endif //REACTORHTTPCPP_CHANNEL_H
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。