acl  3.5.3.0
ipc_client.hpp
浏览该文件的文档.
1 #pragma once
2 #include "../acl_cpp_define.hpp"
3 #include <list>
4 #include "../stream/aio_socket_stream.hpp"
5 
6 namespace acl {
7 
8 typedef struct MSG_HDR
9 {
10  int nMsg;
11  int dlen;
12 #if defined(_WIN32) || defined(_WIN64)
13  __int64 magic;
14 #else
15  long long int magic;
16 #endif
17 } MSG_HDR;
18 
19 typedef enum
20 {
23 } io_status;
24 
25 class aio_handle;
26 class ipc_adapter;
27 class aio_socket_stream;
28 class socket_stream;
29 
30 /**
31  * 异步IP消息类
32  */
34 {
35 public:
36 #if defined(_WIN32) || defined(_WIN64)
37  ipc_client(__int64 magic = -1);
38 #else
39  ipc_client(long long int magic = -1);
40 #endif
41  virtual ~ipc_client();
42 
43  /**
44  * 直接销毁接口,子类可以重载该接口
45  */
46  virtual void destroy()
47  {
48  delete this;
49  }
50 
51  /**
52  * 当调用 open 函数连接消息服务器成功时调用此函数
53  */
54  virtual void on_open() {}
55 
56  /**
57  * 当异步流关闭时的回调接口
58  */
59  virtual void on_close() {}
60 
61  /**
62  * 当收到消息时的回调函数,子类必须实现该接口
63  * @param nMsg {int} 用户添加的自定义消息值
64  * @param data {void*} 消息数据
65  * @param dlen {int} 消息数据的长度
66  */
67  virtual void on_message(int nMsg, void* data, int dlen);
68 
69  /**
70  * 与消息服务器之间建立连接并创建异步流
71  * @param handle {aio_handle*} 异步引擎句柄
72  * @param addr {const char*} 消息服务器监听地址,格式为:
73  * IP:PORT(支持_WIN32/UNIX),unix_path (仅支持UNIX)
74  * @param timeout {int} 连接超时时间
75  */
76  bool open(aio_handle* handle, const char* addr, int timeout);
77 
78  /**
79  * 异步流已经建立,调用此函数完成 ipc_client 连接过程
80  * @param client {aio_socket_stream*} 异步连接流
81  */
82  void open(aio_socket_stream* client);
83 
84  /**
85  * 与消息服务器之间建立连接并创建同步流
86  * @param addr {const char*} 消息服务器监听地址,格式为:
87  * IP:PORT(支持_WIN32/UNIX),unix_path (仅支持UNIX)
88  * @param timeout {int} 连接超时时间
89  */
90  bool open(const char* addr, int timeout);
91 
92  /**
93  * 同步流已经建立,调用此函数完成 ipc_client 连接过程
94  * @param client {socket_stream*} 异步连接流
95  */
96  void open(socket_stream* client);
97 
98  /**
99  * 消息流已经创建,调用此函数打开 IPC 通道
100  */
101  void wait();
102 
103  /**
104  * 主动关闭消息流
105  */
106  void close();
107 
108  /**
109  * 连接流是否正常打开着
110  * @return {bool}
111  */
112  bool active() const;
113 
114  /**
115  * 添加指定消息的回调过程对象
116  * @param nMsg {int} 消息号
117  */
118  void append_message(int nMsg);
119 
120  /**
121  * 删除指定消息的回调过程对象
122  * @param nMsg {int} 消息号
123  */
124  void delete_message(int nMsg);
125 
126  /**
127  * 发送消息
128  * @param nMsg {int} 消息号
129  * @param data {const void*} 数据
130  * @param dlen {int} 数据长度
131  */
132  void send_message(int nMsg, const void* data, int dlen);
133 
134  /**
135  * 获得异步流句柄
136  * @return {aio_socket_stream*}
137  */
138  aio_socket_stream* get_async_stream() const;
139 
140  /**
141  * 获得异步引擎句柄
142  */
143  aio_handle& get_handle() const;
144 
145  /**
146  * 获得同步流够本
147  * @return {socket_stream*}
148  */
149  socket_stream* get_sync_stream() const;
150 protected:
151  /**
152  * 触发消息过程
153  * @param nMsg {int} 消息ID
154  * @param data {void*} 接收到的消息数据地址
155  * @param dlen {int} 接收到的消息数据长度
156  */
157  void trigger(int nMsg, void* data, int dlen);
158 private:
159 #if defined(_WIN32) || defined(_WIN64)
160  __int64 magic_;
161 #else
162  long long int magic_;
163 #endif
164  char* addr_;
165  std::list<int> messages_;
166  //aio_handle* handle_;
167  aio_socket_stream* async_stream_;
168  socket_stream* sync_stream_;
169  socket_stream* sync_stream_inner_;
170  bool closing_;
171 
172  io_status status_;
173  MSG_HDR hdr_;
174 
175  // 基类虚函数
176 
177  virtual bool read_callback(char* data, int len);
178  virtual bool write_callback();
179  virtual void close_callback();
180  virtual bool timeout_callback();
181  virtual bool open_callback();
182 };
183 
184 } // namespace acl
virtual void on_close()
Definition: ipc_client.hpp:59
io_status
Definition: ipc_client.hpp:19
struct acl::MSG_HDR MSG_HDR
virtual void on_open()
Definition: ipc_client.hpp:54
long long int magic
Definition: ipc_client.hpp:15
virtual void destroy()
Definition: ipc_client.hpp:46
#define ACL_CPP_API