模板网站seo,wordpress凌风教程,门户网站demo下载,网站建设 呢咕云项目完整版在#xff1a; 文章目录 一、channel模块#xff1a;事件管理Channel类实现二、提供的功能三、实现思想#xff08;一#xff09;功能#xff08;二#xff09;意义#xff08;三#xff09;功能设计 四、代码#xff08;一#xff09;框架#xff08;二…项目完整版在 文章目录 一、channel模块事件管理Channel类实现二、提供的功能三、实现思想一功能二意义三功能设计 四、代码一框架二完整 一、channel模块事件管理Channel类实现 二、提供的功能
1.对监控事件的管理 描述符是否可读 描述符是否可写 对描述符监控可读 对描述符监控可写 解除可读事件监控 解除可写事件监控 解除所有事件监控 2.对监控事件触发后的处理 设置对于不同事件的回调处理函数 明确触发了某个事件该如何处理
三、实现思想
一功能
对socket套接字的操作进行封装。
二意义
对socket套接字的操作进行封装。
三功能设计
1.对监控事件的管理 描述符是否可读 描述符是否可写 对描述符监控可读 对描述符监控可写 解除可读事件监控 解除可写事件监控 解除所有事件监控 2.对监控事件触发后的处理 设置对于不同事件的回调处理函数 明确触发了某个事件该如何处理
四、代码
一框架
class Channel {private:int _fd;uint32_t events; // 当前需要监控的事件uint32_t revents; // 当前连接触发的事件using eventCallback std::functionvoid();eventCallback _read_callback; // 可读事件被触发的回调函数eventCallback _error_callback; // 可写事件被触发的回调函数eventCallback _close_callback; // 连接关闭事件被触发的回调函数eventCallback _event_callback; // 任意事件被触发的回调函数eventCallback _write_callback; // 可写事件被触发的回调函数public:Channel(int fd) : fd(_fd) {}int Fd() {return _fd ;}void setReadCallback(const eventCallback cb);void setWriteCallback(const eventCallback cb);void setErrorCallback(const eventCallback cb);void setCloseCallback(const eventCallback cb);void setEventCallback(const eventCallback cb);bool readAble(); // 当前是否可读bool writeAble(); // 当前是否可写void enableRead(); // 启动读事件监控void enableWrite(); // 启动写事件监控void disableRead(); // 关闭读事件监控void disableWrite(); // 关闭写事件监控void disableAll(); // 关闭所有事件监控void Remove(); //移除监控void handleEvent(); // 事件处理一旦触发了某个事件就调用这个函数};二完整
class Channel {private:int _fd;uint32_t events; // 当前需要监控的事件uint32_t revents; // 当前连接触发的事件using eventCallback std::functionvoid();eventCallback _read_callback; // 可读事件被触发的回调函数eventCallback _error_callback; // 可写事件被触发的回调函数eventCallback _close_callback; // 连接关闭事件被触发的回调函数eventCallback _event_callback; // 任意事件被触发的回调函数eventCallback _write_callback; // 可写事件被触发的回调函数public:Channel(int fd) : fd(_fd) {}int Fd() {return _fd ;}void SetRevents(uint32_t events) {_revents events; }void setReadCallback(const eventCallback cb) { _read_callback cb;}void setWriteCallback(const eventCallback cb) { _write_callback cb; }void setErrorCallback(const eventCallback cb) { _error_callback cb; }void setCloseCallback(const eventCallback cb) { _close_callback cb; }void setEventCallback(const eventCallback cb) { _event_callback cb; }bool readAble() { // 当前是否可读 return (_events EPOLLIN);}bool writeAble() { // 当前是否可写return (_events EPOLLOUT);}void enableRead() {// 启动读事件监控_events | EPOLLIN; // 后面会添加到EventLoop的事件监控}void enableWrite() { // 启动写事件监控 _events | EPOLLOUT; // 后面会添加到EventLoop的事件监控}void disableRead() { // 关闭读事件监控_events ~EPOLLIN; // 后面会修改到EventLoop的事件监控}void disableWrite() { // 关闭写事件监控 _events ~EPOLLOUT;}void disableAll() { // 关闭所有事件监控_events 0;}void Remove(); // 后面会调用EventLoop接口移除监控void HandleEvent() {if ((_revents EPOLLIN) || (_revents EPOLLRDHUP) || (_revents EPOLLPRI)) {if (_read_callback) _read_callback();}/*有可能会释放连接的操作事件一次只处理一个*/if (_revents EPOLLOUT) {if (_write_callback) _write_callback();}else if (_revents EPOLLERR) {if (_error_callback) _error_callback();//一旦出错就会释放连接因此要放到前边调用任意回调}else if (_revents EPOLLHUP) {if (_close_callback) _close_callback();}/*不管任何事件都调用的回调函数*/if (_event_callback) _event_callback();}};