-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathmultithread libnet.uml
165 lines (141 loc) · 2.79 KB
/
multithread libnet.uml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
@startuml
class TcpServer{
-EventLoop* baseloop;
-Acceptor*;
-EventLoopThreadPool*;
-vector<TcpConnectionPtr>;
+void start();
+void setThreadNum(int);
+void setMessageCallback(cb);
+void newConnection(fd);
}
class Acceptor{
+void listen();
-void handRead();
-Channel acceptChannel;
-NewConnectionCb cb;
}
class EventLoopThread{
+EventLoop* getloop()
-void threadMain()
-EventLoop*
std::thread thread_
-CountDownLatch cdl
}
class EventLoopThreadPool{
+EventLoop* getNextLoop()
+void buildThreadPool()
-vector<EventLoopThread> pool
-int nextloop
-EventLoop* baseloop
}
class EventLoop{
+void loop();
+void runInLoop(functor);
+void assertInOwnerThread();
+void registerTimerCb(timerCb);
-void doPendingFunctors();
PollerBase*;
TimerCbQueue que;
int wakeupfd;
vector<functor> pendingtask;
}
class Channel{
+void handleEvent();
+void enableReading();
+void enableWriting();
+void setXXXCallback();
-Eventloop*;
int fd;
EventCallback xxcb;
}
class PollerBase{
+ChannelList poll(int timeout) = 0;
+void updateChannel(Channel*) = 0;
+void removeChannel(Channel*) = 0;
-void fillActiveChannels() = 0;
-Eventloop* ownerloop_;
}
class Poller{
-void addNewChannel(Channel*);
-void updateExistChannel(Channel*);
-vector<struct pollfd> fdlist;
}
class EPoller{
-void syncToEpoll();
-int epollfd;
-vector<struct epoll_event> revents;
}
class TcpConnection{
+void send(msg);
+void receive();
+void handleWrite();
+void handleClose();
+void handleError();
-Eventloop*;
-Channel*;
-Socket*;
-SendBuffer;
-ReceiveBuffer;
}
class Buffer{
+void append(msg)
+string retrieveAll()
}
class SendBuffer{
+ send()
+ send(msg)
-int fd
-int highWaterMark
}
class ReceiveBuffer{
+void receive()
-int fd
}
class TimerQueue{
+void addTimerCb()
-void handTimeOut()
-Timers getExpired()
-void reset(expiredTimers)
-int timerfd
-std::set<pair<Timestamp, Cb>>timers
}
class TimerCallback{
+void run()
+bool repeat()
+void restart()
-Callbackfun
int period
}
class Connector{
+void start()
-void connect()
-void retry()
-void handleWrite()
-EventLoop*
-Channel
}
class TcpClient{
+void connect()
+void setXXXCallback()
-EventLoop*
-Connector
-TcpConnectionPtr
}
TcpServer "1" *-- "1" EventLoopThreadPool
TcpServer "1" *-- "1" Acceptor
EventLoopThreadPool "1" *-- "N" EventLoopThread
EventLoopThread "1" *-- "1" EventLoop
EventLoop "1" *-- "1" PollerBase
EventLoop "1" *-- "1" TimerQueue
TimerQueue "1" *-- "N" TimerCallback
PollerBase "1" *-- "N" Channel
Channel "1" *-- "1" TcpConnection
TcpConnection "1" *-- "1" SendBuffer
TcpConnection "1" *-- "1" ReceiveBuffer
TcpClient "1" *-- "1" Connector
PollerBase <|-- EPoller
PollerBase <|-- Poller
Buffer <|-- SendBuffer
Buffer <|-- ReceiveBuffer
@enduml