acl
3.5.3.0
aio_socket_stream.hpp
浏览该文件的文档.
1
#pragma once
2
#include "../acl_cpp_define.hpp"
3
#if defined(_WIN32) || defined(_WIN64)
4
# include <WinSock2.h>
5
#endif
6
#include "
aio_istream.hpp
"
7
#include "
aio_ostream.hpp
"
8
9
namespace
acl
10
{
11
12
/**
13
* 当异步客户端流异步连接远程服务器时的回调函数类,该类为纯虚类,
14
* 要求子类必须实现 open_callback 回调过程
15
*/
16
class
ACL_CPP_API
aio_open_callback
:
public
aio_callback
17
{
18
public
:
19
aio_open_callback
(
void
) {}
20
virtual
~aio_open_callback
(
void
) {}
21
22
virtual
bool
open_callback(
void
) = 0;
23
protected
:
24
private
:
25
};
26
27
struct
AIO_OPEN_CALLBACK
28
{
29
aio_open_callback
*
callback
;
30
bool
enable
;
31
};
32
33
class
aio_handle
;
34
35
/**
36
* 网络异步流类,该类继承了异步读写流,同时该类只能在堆上分配,
37
* 不能在栈上分配,并且该类结束时应用不必释放该类对象,因为异步流
38
* 框架内部会自动释放该类对象,应用可以调用 close 主动关闭流
39
*/
40
class
ACL_CPP_API
aio_socket_stream
41
:
public
aio_istream
42
,
public
aio_ostream
43
{
44
public
:
45
/**
46
* 构造函数,创建网络异步客户端流
47
* @param handle {aio_handle*} 异步引擎句柄
48
* @param stream {ACL_ASTREAM*} 非阻塞流
49
* @param opened {bool} 该流是否已经与服务端正常建立了连接,如果是则自动
50
* hook 读写过程及关闭/超时过程,否则仅 hook 关闭/超时过程
51
*/
52
aio_socket_stream
(
aio_handle
* handle,
ACL_ASTREAM
*
stream
,
bool
opened =
false
);
53
54
/**
55
* 构造函数,创建网络异步客户端流,并 hook 读写过程及关闭/超时过程
56
* @param handle {aio_handle*} 异步引擎句柄
57
* @param fd {int} 连接套接口句柄
58
*/
59
#if defined(_WIN32) || defined(_WIN64)
60
aio_socket_stream
(
aio_handle
* handle, SOCKET fd);
61
#else
62
aio_socket_stream
(
aio_handle
* handle,
int
fd);
63
#endif
64
65
/**
66
* 打开与远程服务器的连接,并自动 hook 流的关闭、超时以及连接成功
67
* 时的回调处理过程
68
* @param handle {aio_handle*} 异步引擎句柄
69
* @param addr {const char*} 远程服务器的地址,地址格式为:
70
* 针对TCP:IP:Port 或 针对域套接口:{filePath}
71
* @param timeout {int} 连接超时时间(秒)
72
* @return {bool} 如果连接立即返回失败则该函数返回 false,如果返回
73
* true 只是表示正处于连接过程中,至于连接是否超时或连接是否失败
74
* 应通过回调函数来判断
75
*/
76
static
aio_socket_stream
* open(
aio_handle
* handle,
77
const
char
* addr,
int
timeout);
78
79
/**
80
* 添加针对 open 函数的回调过程
81
* @param callback {aio_open_callback*} 回调函数
82
*/
83
void
add_open_callback(
aio_open_callback
* callback);
84
85
/**
86
* 从 open 回调对象集合中删除
87
* @param callback {aio_open_callback*} 被删除的回调对象,若该
88
* 值为空,则删除所有的回调对象
89
* @return {int} 返回被从回调对象集合中删除的回调对象的个数
90
*/
91
int
del_open_callback(
aio_open_callback
* callback = NULL);
92
93
/**
94
* 禁止回调对象类集合中的某个回调类对象,但并不从回调类对象
95
* 集合中删除,只是不被调用而已
96
* @param callback {aio_open_callback*} 被禁止的回调对象,若该
97
* 值为空,则禁止所有的回调对象
98
* @return {int} 返回被从回调对象集合中禁用的回调对象的个数
99
*/
100
int
disable_open_callback(
aio_open_callback
* callback = NULL);
101
102
/**
103
* 启用所有的回调对象被调用
104
* @param callback {aio_open_callback*} 启用指定的回调对象,
105
* 如果该值为空,则启用所有的回调对象
106
* @return {int} 返回被启用的回调对象的个数
107
*/
108
int
enable_open_callback(
aio_open_callback
* callback = NULL);
109
110
/**
111
* 针对 open 过程,判断是否已经连接成功
112
* @return {bool} 返回 true 表示连接成功,否则表示还连接成功
113
*/
114
bool
is_opened(
void
)
const
;
115
116
protected
:
117
virtual
~
aio_socket_stream
(
void
);
118
119
/**
120
* 通过此函数来动态释放只能在堆上分配的异步流类对象
121
*/
122
virtual
void
destroy(
void
);
123
124
/**
125
* 注册流连接成功的回调过程
126
*/
127
void
hook_open(
void
);
128
129
private
:
130
std::list<AIO_OPEN_CALLBACK*>* open_callbacks_;
131
132
static
int
open_callback(
ACL_ASTREAM
*,
void
*);
133
};
134
135
}
// namespace acl
aio_ostream.hpp
acl::AIO_OPEN_CALLBACK::callback
aio_open_callback * callback
Definition:
aio_socket_stream.hpp:29
acl::aio_istream
Definition:
aio_istream.hpp:60
acl::aio_ostream
Definition:
aio_ostream.hpp:59
acl::aio_open_callback::~aio_open_callback
virtual ~aio_open_callback(void)
Definition:
aio_socket_stream.hpp:20
acl
Definition:
acl_cpp_init.hpp:4
acl::AIO_OPEN_CALLBACK
Definition:
aio_socket_stream.hpp:27
acl::AIO_OPEN_CALLBACK::enable
bool enable
Definition:
aio_socket_stream.hpp:30
acl::aio_handle
Definition:
aio_handle.hpp:29
acl::aio_callback
Definition:
aio_stream.hpp:19
acl::aio_open_callback::aio_open_callback
aio_open_callback(void)
Definition:
aio_socket_stream.hpp:19
acl::aio_open_callback
Definition:
aio_socket_stream.hpp:16
acl::stream
Definition:
stream.hpp:24
acl::aio_socket_stream
Definition:
aio_socket_stream.hpp:40
ACL_CPP_API
#define ACL_CPP_API
Definition:
acl_cpp_define.hpp:16
ACL_ASTREAM
Definition:
acl_aio.h:138
aio_istream.hpp
include
acl_cpp
stream
aio_socket_stream.hpp
生成于 2021年 九月 10日 星期五 11:14:45 , 为 acl使用
1.8.15