11// @Author Lin Ya
22// @Email xxbbb@vip.qq.com
33#pragma once
4- #include " Timer.h"
5- #include < string>
6- #include < unordered_map>
7- #include < memory>
84#include < sys/epoll.h>
9- #include < functional>
105#include < sys/epoll.h>
11-
6+ #include < functional>
7+ #include < memory>
8+ #include < string>
9+ #include < unordered_map>
10+ #include " Timer.h"
1211
1312class EventLoop ;
1413class HttpData ;
1514
16-
17- class Channel
18- {
19- private:
20- typedef std::function<void ()> CallBack;
21- EventLoop *loop_;
22- int fd_;
23- __uint32_t events_;
24- __uint32_t revents_;
25- __uint32_t lastEvents_;
26-
27- // 方便找到上层持有该Channel的对象
28- std::weak_ptr<HttpData> holder_;
29-
30- private:
31- int parse_URI ();
32- int parse_Headers ();
33- int analysisRequest ();
34-
35- CallBack readHandler_;
36- CallBack writeHandler_;
37- CallBack errorHandler_;
38- CallBack connHandler_;
39-
40- public:
41- Channel (EventLoop *loop);
42- Channel (EventLoop *loop, int fd);
43- ~Channel ();
44- int getFd ();
45- void setFd (int fd);
46-
47- void setHolder (std::shared_ptr<HttpData> holder)
48- {
49- holder_ = holder;
50- }
51- std::shared_ptr<HttpData> getHolder ()
52- {
53- std::shared_ptr<HttpData> ret (holder_.lock ());
54- return ret;
55- }
56-
57- void setReadHandler (CallBack &&readHandler)
58- {
59- readHandler_ = readHandler;
60- }
61- void setWriteHandler (CallBack &&writeHandler)
62- {
63- writeHandler_ = writeHandler;
15+ class Channel {
16+ private:
17+ typedef std::function<void ()> CallBack;
18+ EventLoop *loop_;
19+ int fd_;
20+ __uint32_t events_;
21+ __uint32_t revents_;
22+ __uint32_t lastEvents_;
23+
24+ // 方便找到上层持有该Channel的对象
25+ std::weak_ptr<HttpData> holder_;
26+
27+ private:
28+ int parse_URI ();
29+ int parse_Headers ();
30+ int analysisRequest ();
31+
32+ CallBack readHandler_;
33+ CallBack writeHandler_;
34+ CallBack errorHandler_;
35+ CallBack connHandler_;
36+
37+ public:
38+ Channel (EventLoop *loop);
39+ Channel (EventLoop *loop, int fd);
40+ ~Channel ();
41+ int getFd ();
42+ void setFd (int fd);
43+
44+ void setHolder (std::shared_ptr<HttpData> holder) { holder_ = holder; }
45+ std::shared_ptr<HttpData> getHolder () {
46+ std::shared_ptr<HttpData> ret (holder_.lock ());
47+ return ret;
48+ }
49+
50+ void setReadHandler (CallBack &&readHandler) { readHandler_ = readHandler; }
51+ void setWriteHandler (CallBack &&writeHandler) {
52+ writeHandler_ = writeHandler;
53+ }
54+ void setErrorHandler (CallBack &&errorHandler) {
55+ errorHandler_ = errorHandler;
56+ }
57+ void setConnHandler (CallBack &&connHandler) { connHandler_ = connHandler; }
58+
59+ void handleEvents () {
60+ events_ = 0 ;
61+ if ((revents_ & EPOLLHUP) && !(revents_ & EPOLLIN)) {
62+ events_ = 0 ;
63+ return ;
6464 }
65- void setErrorHandler (CallBack &&errorHandler)
66- {
67- errorHandler_ = errorHandler;
65+ if (revents_ & EPOLLERR) {
66+ if (errorHandler_) errorHandler_ ();
67+ events_ = 0 ;
68+ return ;
6869 }
69- void setConnHandler (CallBack &&connHandler)
70- {
71- connHandler_ = connHandler;
70+ if (revents_ & (EPOLLIN | EPOLLPRI | EPOLLRDHUP)) {
71+ handleRead ();
7272 }
73-
74- void handleEvents ()
75- {
76- events_ = 0 ;
77- if ((revents_ & EPOLLHUP) && !(revents_ & EPOLLIN))
78- {
79- events_ = 0 ;
80- return ;
81- }
82- if (revents_ & EPOLLERR)
83- {
84- if (errorHandler_) errorHandler_ ();
85- events_ = 0 ;
86- return ;
87- }
88- if (revents_ & (EPOLLIN | EPOLLPRI | EPOLLRDHUP))
89- {
90- handleRead ();
91- }
92- if (revents_ & EPOLLOUT)
93- {
94- handleWrite ();
95- }
96- handleConn ();
73+ if (revents_ & EPOLLOUT) {
74+ handleWrite ();
9775 }
98- void handleRead ();
99- void handleWrite ();
100- void handleError (int fd, int err_num, std::string short_msg);
101- void handleConn ();
76+ handleConn ();
77+ }
78+ void handleRead ();
79+ void handleWrite ();
80+ void handleError (int fd, int err_num, std::string short_msg);
81+ void handleConn ();
10282
103- void setRevents (__uint32_t ev)
104- {
105- revents_ = ev;
106- }
83+ void setRevents (__uint32_t ev) { revents_ = ev; }
10784
108- void setEvents (__uint32_t ev)
109- {
110- events_ = ev;
111- }
112- __uint32_t & getEvents ()
113- {
114- return events_;
115- }
85+ void setEvents (__uint32_t ev) { events_ = ev; }
86+ __uint32_t &getEvents () { return events_; }
11687
117- bool EqualAndUpdateLastEvents ()
118- {
119- bool ret = (lastEvents_ == events_);
120- lastEvents_ = events_;
121- return ret;
122- }
123-
124- __uint32_t getLastEvents ()
125- {
126- return lastEvents_;
127- }
88+ bool EqualAndUpdateLastEvents () {
89+ bool ret = (lastEvents_ == events_);
90+ lastEvents_ = events_;
91+ return ret;
92+ }
12893
94+ __uint32_t getLastEvents () { return lastEvents_; }
12995};
13096
13197typedef std::shared_ptr<Channel> SP_Channel;
0 commit comments