-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTcpMonitor.h
84 lines (61 loc) · 1.8 KB
/
TcpMonitor.h
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
/*
* TcpMonitor.h
*
* Created on: Dec 17, 2014
* Author: root
*/
#ifndef GWEN_TCPMONITOR_H_
#define GWEN_TCPMONITOR_H_
#include <string.h>//use strlen by TcpClient and TcpServer
#include "ThreadMonitor.h"
#include "Buffer.h"
enum ThreadType
{
TT_single_thread = 1,
TT_multi_thread = 2,
};
struct HalfBlock
{
Buffer buf;
bool headIsOver;
unsigned int needSize;
};
class TcpMonitor
{
typedef std::map<int, HalfBlock*> HalfMap;
public:
TcpMonitor(void);
virtual ~TcpMonitor(void);
virtual int init(int receive_thread_amount = 0 ,//
int send_thread_amount = 0, int event_thread_amount = 0);
virtual int start(void);
virtual int stop(void);
virtual int final(void);
void handleRead(int fd, Buffer *buffer);
virtual int send(int fd, Buffer *buffer);
virtual int receive(int fd, Buffer *buffer) =0;
virtual void handleClosed(int fd) = 0;
virtual void handleConnected(void){};
virtual int receiveHandleMessage(Buffer *buffer);
virtual int sendHandleMessage(Buffer *buffer);
event_base* eventBase(int index = 0);
void eventBase(event_base* base);
int threadType(void);
protected:
virtual int sendMessage(int fd, Buffer *buffer) = 0;
private:
static int receiveHandleMessage(void *self, void *msg);
static int sendHandleMessage(void *self, void *msg);
void errorDeleteThreadMonitor(ThreadMonitor* &monitor, const char *error = NULL);
bool makeCompletionMessage(int fd, Buffer *inBuffer, Buffer *&outBuffer);
bool makeHeadCompletionMessage(const tdzm::NetPacketHeader& head, //
int fd, Buffer *inBuffer, Buffer *&outBuffer);
event_base* main_base_;
ProcessThreadMonitor *receive_thread_monitor_;
ProcessThreadMonitor *send_thread_monitor_;
EventBaseThreadMonitor *event_thread_monitor_;
int thread_type_;
MutexLock m_halfMutex;
HalfMap m_halfMap;
};
#endif /* GWEN_TCPMONITOR_H_ */