acl
3.5.3.0
ipc_service.hpp
浏览该文件的文档.
1
#pragma once
2
#include "../acl_cpp_define.hpp"
3
#include "../stdlib/locker.hpp"
4
#include "../stdlib/noncopyable.hpp"
5
#include "
ipc_server.hpp
"
6
7
struct
acl_pthread_pool_t
;
8
9
namespace
acl
{
10
11
class
ipc_client;
12
13
class
ACL_CPP_API
ipc_request
:
public
noncopyable
14
{
15
public
:
16
ipc_request
();
17
virtual
~
ipc_request
();
18
19
/**
20
* 虚接口,子类实现此类用于处理具体的任务,该接口适用
21
* 于采用 IO 消息的模式
22
*/
23
virtual
void
run(
ipc_client
* ipc);
24
25
#if defined(_WIN32) || defined(_WIN64)
26
/**
27
* 虚接口,子类实现此类用于处理具体的任务,该接口适用
28
* 于采用 _WIN32 消息的模式
29
*/
30
virtual
void
run(HWND hWnd);
31
32
/**
33
* 设置 _WIN32 窗口句柄
34
* @param hWnd {HWND} 窗口句柄
35
*/
36
void
set_hwnd(HWND hWnd)
37
{
38
hWnd_ = hWnd;
39
}
40
41
/**
42
* 获得 _WIN32 窗口句柄
43
* @return {HWND} 窗口句柄
44
*/
45
HWND get_hwnd(
void
)
const
46
{
47
return
(hWnd_);
48
}
49
#endif
50
private
:
51
#if defined(_WIN32) || defined(_WIN64)
52
HWND hWnd_;
53
#endif
54
};
55
56
class
ACL_CPP_API
ipc_service
:
public
ipc_server
57
{
58
public
:
59
/**
60
* 构造函数
61
* @param nthread {int} 如果该值 > 1 则内部自动采用线程池,否则
62
* 则是一个请求一个线程
63
* @param ipc_keep {bool} 内部 IPC 消息流是否保持长连接,保持长
64
* 连接有助于提高消息传递的效率
65
*/
66
ipc_service
(
int
nthread,
bool
ipc_keep =
true
);
67
68
virtual
~
ipc_service
();
69
70
#if defined(_WIN32) || defined(_WIN64)
71
/**
72
* 当采用 _WIN32 消息模式时,子类需要实现此虚接口用于处理具体的
73
* 消息过程,子类必须实现该接口
74
* @param hWnd {HWND} 窗口句柄
75
* @param msg {UINT} 用户自定义消息号
76
* @param wParam {WPARAM} 参数
77
* @param lParam {LPARAM} 参数
78
*/
79
virtual
void
win32_proc(HWND hWnd, UINT msg,
80
WPARAM wParam, LPARAM lParam);
81
#endif
82
83
/**
84
* 从 ipc 消息流连接池中取得一个连接
85
* @return {ipc_client*} 返回 NULL 表示无法连接消息服务器
86
*/
87
ipc_client
* peek_conn();
88
89
/**
90
* 将用完的 ipc 消息连接放回连接池中
91
* @param conn {ipc_client*} ipc 消息连接流
92
*/
93
void
push_conn(
ipc_client
* conn);
94
protected
:
95
#if defined(_WIN32) || defined(_WIN64)
96
__int64 magic_;
97
#else
98
long
long
int
magic_
;
99
#endif
100
101
/**
102
* 子类调用此函数发送请求服务
103
* @param req {ipc_request*}
104
*/
105
void
request(
ipc_request
* req);
106
private
:
107
bool
ipc_keep_;
108
acl_pthread_pool_t
* thread_pool_;
109
#if defined(_WIN32) || defined(_WIN64)
110
HWND hWnd_;
111
HINSTANCE hInstance_;
112
113
/**
114
* 基类虚函数:Windows 消息方式下,创建隐藏窗口句柄
115
*/
116
virtual
bool
create_window(
void
);
117
118
/**
119
* 基类虚函数:Windows 消息方式下,关闭隐藏窗口句柄
120
*/
121
virtual
void
close_window(
void
);
122
#endif
123
124
locker
lock_;
125
std::list<ipc_client*> conn_pool_;
126
};
127
128
}
// namespace acl
acl::ipc_client
Definition:
ipc_client.hpp:33
acl::ipc_request
Definition:
ipc_service.hpp:13
ipc_server.hpp
acl::locker
Definition:
locker.hpp:22
acl
Definition:
acl_cpp_init.hpp:4
acl::noncopyable
Definition:
noncopyable.hpp:6
acl::ipc_server
Definition:
ipc_server.hpp:13
acl_pthread_pool_t
struct acl_pthread_pool_t acl_pthread_pool_t
Definition:
acl_pthread_pool.h:36
acl::ipc_service
Definition:
ipc_service.hpp:56
acl::ipc_service::magic_
long long int magic_
Definition:
ipc_service.hpp:98
ACL_CPP_API
#define ACL_CPP_API
Definition:
acl_cpp_define.hpp:16
include
acl_cpp
ipc
ipc_service.hpp
生成于 2021年 九月 10日 星期五 11:14:44 , 为 acl使用
1.8.15