30.muduo学习笔记之net_Channel.{h&cc}

1. 说明

  1. 一个Channel类, 是selectable IO channel,负责注册与响应IO事件,它不拥有file descriptor.它是Acceptor,Connector,EventLoop,TimeQueue,TcpConnection的成员,生命周期由后者控制

2. 变量

  1. 类型定义

    • EventCallback
    • ReadEventCallback,两种不同的回调函数
  2. static const int kNoneEvent;

  3. static const int kReadEvent;

  4. static const int kWriteEvent;

    • 几种poll关注事件的定义
  5. EventLoop* loop_;

    • 不解释
  6. const int fd_;

    • 文件描述符,构造函数中指定
  7. int events_;

  8. int revents_; // it’s the received event types of epoll or poll

    • poll关注事件的种类,是POLLIN|POLLPRI还是POLLOUT还是0,revnets_是pollfd结构的revents,这里需要知道关于poll()的知识
  9. int index_; // used by Poller.

    • 对于PollPoller要用,小于0表示是一个新的Channel,还没加入poll关注,否则是更新一个存在的Channel
    • 对于EPollPoller,有三种:-1,1,2,分别表示新的,已添加,已删除
  10. bool logHup_;

    • 如果有POLLHUP事件,是否要打印日志,POLLHUP是当socket的另一端关闭时,或读到文件结尾,会收到pollhup事件
  11. std::weak_ptr tie_;

    • 这个要结合TcpConenction理解,在那个文件中有说明
  12. bool tied_;

    • 如上
  13. bool eventHandling_;

    • 是否处于处理事件的过程中,即是否是handleEventWithGuard()函数调用过程中
  14. bool addedToLoop_;

    • 判断当前channel是否加入事件关注
  15. ReadEventCallback readCallback_;

  16. EventCallback writeCallback_;

  17. EventCallback closeCallback_;

  18. EventCallback errorCallback_;

    • 几个回调函数

3. 函数

1. 私有

  1. static string eventsToString(int fd, int ev);

    • 返回关注事件的字符串格式
  2. void update();

    • 调用loop_的updateChannel(this),改变通道信息
  3. void handleEventWithGuard(Timestamp receiveTime);

    • 对应的poll事件选择相应的回调函数进行执行

2. 公有

  1. 构造

    • 各成员初始化
  2. 析构

    • 确保当前通道已经被其他对象销毁
  3. set/get系列

    • void setReadCallback(ReadEventCallback cb)
    • void setWriteCallback(EventCallback cb)
    • void setCloseCallback(EventCallback cb)
    • void setErrorCallback(EventCallback cb)
    • void set_revents(int revt)
    • int fd()
    • int events()
    • int index()
    • void set_index(int idx)
    • 如名,没有set的一般就是get
  4. void tie(const std::shared_ptr&);

    • 在TcpConnection中使用,那个文件中有说明
  5. bool isNoneEvent() const

    • 看events_是否为0
  6. 对poll关注事件的设置

    • void enableReading() { events_ |= kReadEvent; update(); }
    • void disableReading() { events_ &= ~kReadEvent; update(); }
    • void enableWriting() { events_ |= kWriteEvent; update(); }
    • void disableWriting() { events_ &= ~kWriteEvent; update(); }
    • void disableAll() { events_ = kNoneEvent; update(); }
    • bool isWriting() const { return events_ & kWriteEvent; }
    • bool isReading() const { return events_ & kReadEvent; }
  7. string reventsToString() const;

  8. string eventsToString() const;

    • 这两个是调试用的,都是调用私有的eventsToString(int fd, int ev),返回关注事件的字符串格式
  9. void doNotLogHup()

    • 设置logHup_为false
  10. EventLoop* ownerLoop()

    • 返回channel所属的EventLoop
  11. void remove();

    • 从loop_中移除此通道
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值