1
1
// @Author Lin Ya
2
2
3
3
#pragma once
4
- #include " Timer.h"
5
- #include < string>
6
- #include < unordered_map>
7
- #include < memory>
8
4
#include < sys/epoll.h>
9
- #include < functional>
10
5
#include < sys/epoll.h>
11
-
6
+ #include < functional>
7
+ #include < memory>
8
+ #include < string>
9
+ #include < unordered_map>
10
+ #include " Timer.h"
12
11
13
12
class EventLoop ;
14
13
class HttpData ;
15
14
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 ;
64
64
}
65
- void setErrorHandler (CallBack &&errorHandler)
66
- {
67
- errorHandler_ = errorHandler;
65
+ if (revents_ & EPOLLERR) {
66
+ if (errorHandler_) errorHandler_ ();
67
+ events_ = 0 ;
68
+ return ;
68
69
}
69
- void setConnHandler (CallBack &&connHandler)
70
- {
71
- connHandler_ = connHandler;
70
+ if (revents_ & (EPOLLIN | EPOLLPRI | EPOLLRDHUP)) {
71
+ handleRead ();
72
72
}
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 ();
97
75
}
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 ();
102
82
103
- void setRevents (__uint32_t ev)
104
- {
105
- revents_ = ev;
106
- }
83
+ void setRevents (__uint32_t ev) { revents_ = ev; }
107
84
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_; }
116
87
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
+ }
128
93
94
+ __uint32_t getLastEvents () { return lastEvents_; }
129
95
};
130
96
131
97
typedef std::shared_ptr<Channel> SP_Channel;
0 commit comments