-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathtcpconnection.h
More file actions
133 lines (106 loc) · 3.06 KB
/
Copy pathtcpconnection.h
File metadata and controls
133 lines (106 loc) · 3.06 KB
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
#pragma once
#ifndef TCPCONNECTION_H
#define TCPCONNECTION_H
#include <functional>
#include <string>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <thread>
#include <memory>
#include "channel.h"
#include "eventloop.h"
/*
TcpConnection类:客户端连接的抽象表示
*/
class TcpConnection : public std::enable_shared_from_this<TcpConnection>
{
public:
//TcpConnection智能指针
typedef std::shared_ptr<TcpConnection> spTcpConnection;
//回调函数类型
typedef std::function<void(const spTcpConnection&)> Callback;
typedef std::function<void(const spTcpConnection&, std::string&)> MessageCallback;
//typedef std::function<void()> TaskCallback;.
TcpConnection(EventLoop *loop, int fd, const struct sockaddr_in &clientaddr);
~TcpConnection();
//获取当前连接的fd
int fd() const
{ return fd_; }
//获取当前连接所属的loop
EventLoop* GetLoop() const { return loop_; }
//添加本连接对应的事件到loop
void AddChannelToLoop();
//发送数据的函数
void Send(const std::string &s);
//在当前IO线程发送数据函数
void SendInLoop();
//主动清理连接
void Shutdown();
//在当前IO线程清理连接函数
void ShutdownInLoop();
//可读事件回调
void HandleRead();
//可写事件回调
void HandleWrite();
//错误事件回调
void HandleError();
//连接关闭事件回调
void HandleClose();
//设置收到数据回调函数
void SetMessaeCallback(const MessageCallback &cb)
{
messagecallback_ = cb;
}
//设置发送完数据的回调函数
void SetSendCompleteCallback(const Callback &cb)
{
sendcompletecallback_ = cb;
}
//设置连接关闭的回调函数
void SetCloseCallback(const Callback &cb)
{
closecallback_ = cb;
}
//设置连接异常的回调函数
void SetErrorCallback(const Callback &cb)
{
errorcallback_ = cb;
}
//设置连接清理函数
void SetConnectionCleanUp(const Callback &cb)
{
connectioncleanup_ = cb;
}
//设置异步处理标志,开启工作线程池的时候使用
void SetAsyncProcessing(const bool asyncprocessing)
{
asyncprocessing_ = asyncprocessing;
}
private:
//当前连接所在的loop
EventLoop *loop_;
//当前连接的事件
std::unique_ptr<Channel> spchannel_;
//文件描述符
int fd_;
//对端地址
struct sockaddr_in clientaddr_;
//半关闭标志位
bool halfclose_;
//连接已关闭标志位
bool disconnected_;
//异步调用标志位,当工作任务交给线程池时,置为true,任务完成回调时置为false
bool asyncprocessing_;
//读写缓冲
std::string bufferin_;
std::string bufferout_;
//各种回调函数
MessageCallback messagecallback_;
Callback sendcompletecallback_;
Callback closecallback_;
Callback errorcallback_;
Callback connectioncleanup_;
};
#endif // TCPCONNECTION_H