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 
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 
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
struct acl_pthread_pool_t acl_pthread_pool_t
long long int magic_
Definition: ipc_service.hpp:98
#define ACL_CPP_API