加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
Channel.h 1.61 KB
一键复制 编辑 原始数据 按行查看 历史
cvPorter 提交于 2024-06-26 16:00 . 提交版
//
// 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
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化