MsgRpc.hpp
1 //
2 // Created by xiong on 2020/10/23.
3 //
4 
5 #ifndef EMX_MSGRPC_HPP
6 #define EMX_MSGRPC_HPP
7 
8 #include "core/EmxUV.hpp"
9 
10 namespace Emx {
16  class MsgRpc {
17  public:
19  enum class ClientTypeE : uint8_t {
20  Req = 0,
21  Resp
22  };
23 
25  struct Header {
26  uint32_t sync;
27  uint32_t reqClientId;
28  uint32_t respClientId;
29  uint32_t sessionId;
30  uint32_t module;
31  uint32_t method;
32  int32_t chn;
34  uint32_t size;
35  };
36  };
37 
39  class MsgRpcReqSync {
40  public:
53  static ErrCodeE Request(uint32_t dstClientId, uint32_t module, uint32_t method, int32_t chn,
54  const char *req = nullptr, int32_t size = 0, std::string *resp = nullptr, int32_t timeoutMs = 10000);
55  };
56 
59  public:
61  using Callback = std::function<void()>;
62 
73  using RecvRespCallback = std::function<void(Emx::ErrCodeE e, uint32_t clientId, uint32_t module,
74  uint32_t method, int32_t chn, const char *data, int32_t size)>;
75 
77  struct Config {
79  char *buffer;
80  int32_t size;
84  };
85 
86  MsgRpcReqAsync() : EuvPipeClientBase(), m_header({}) {
87  m_waitSize = sizeof(MsgRpc::Header);
88  m_waitHeader = true;
89  }
90 
97 
100 
111  ErrCodeE Request(uint32_t dstClientId, uint32_t module, uint32_t method, int32_t chn, const char *req = nullptr,
112  int32_t size = 0);
113 
114  protected:
115  void OnConnect() override {
116  if (m_cbOnConnected) m_cbOnConnected();
117  }
118 
119  void OnDisConnect() override {
120  if (m_cbOnDisConnected) m_cbOnDisConnected();
121  }
122 
123  void OnRecv(const char *data, int32_t size) override;
124 
125  private:
126  bool m_waitHeader;
127  uint32_t m_waitSize;
128  MsgRpc::Header m_header;
129  std::string m_data;
130  Callback m_cbOnConnected;
131  Callback m_cbOnDisConnected;
132  RecvRespCallback m_cbOnRecvResp;
133  };
134 
136  class MsgRpcRep : public EuvPipeClientBase {
137  public:
139  using Callback = std::function<void()>;
149  using RecvReqCallback = std::function<ErrCodeE(uint32_t module, uint32_t method, int32_t chn, const char *data,
150  int32_t size, std::string &out)>;
152  struct Config {
154  uint32_t clientId;
155  char *buffer;
156  int32_t size;
160  };
161 
163  m_waitSize = sizeof(MsgRpc::Header);
164  m_waitHeader = true;
165  m_clientId = 0;
166  }
167 
174 
176  void DestroyMsgRpcRep() { Destroy(); }
177 
178  protected:
179  void OnConnect() override {
180  if (m_cbConnected) m_cbConnected();
181  }
182 
183  void OnDisConnect() override {
184  if (m_cbDisConnected) m_cbDisConnected();
185  }
186 
187  void OnRecv(const char *data, int32_t size) override;
188 
189  private:
190  bool m_waitHeader;
191  uint32_t m_waitSize;
192  MsgRpc::Header m_header;
193  std::string m_data;
194  Callback m_cbConnected;
195  Callback m_cbDisConnected;
196  RecvReqCallback m_cbRecvReq;
197  uint32_t m_clientId;
198  };
200 }// namespace Emx
201 #endif//EMX_MSGRPC_HPP
实现多路复用循环的主体,所有基于EuvLoop的事件都应绑定到一个EuvLoop上
Definition: EuvLoop.hpp:18
使用EuvPipe作为EuvStreamInf,并且继承EuvStmClientBase, 形成以Pipe为底层通信机制面向连接的客户端
Definition: EuvPipe.hpp:103
void Destroy()
断开链接并销毁客户端
异步非阻塞响应端
Definition: MsgRpc.hpp:136
std::function< void()> Callback
连接状态回调
Definition: MsgRpc.hpp:139
void OnDisConnect() override
Definition: MsgRpc.hpp:183
void OnConnect() override
Definition: MsgRpc.hpp:179
ErrCodeE CreateMsgRpcRep(Config &cfg)
创建异步消息响应体
void OnRecv(const char *data, int32_t size) override
std::function< ErrCodeE(uint32_t module, uint32_t method, int32_t chn, const char *data, int32_t size, std::string &out)> RecvReqCallback
接收到RPC请求回调
Definition: MsgRpc.hpp:150
MsgRpcRep()
Definition: MsgRpc.hpp:162
void DestroyMsgRpcRep()
销毁请求体
Definition: MsgRpc.hpp:176
异步非阻塞RPC请求
Definition: MsgRpc.hpp:58
void DestroyMsgRpcReqAsync()
销毁请求体
Definition: MsgRpc.hpp:99
ErrCodeE Request(uint32_t dstClientId, uint32_t module, uint32_t method, int32_t chn, const char *req=nullptr, int32_t size=0)
发起异步请求
void OnConnect() override
Definition: MsgRpc.hpp:115
MsgRpcReqAsync()
Definition: MsgRpc.hpp:86
std::function< void()> Callback
连接状态回调
Definition: MsgRpc.hpp:61
ErrCodeE CreateMsgRpcReqAsync(Config &cfg)
创建异步消息请求体
void OnDisConnect() override
Definition: MsgRpc.hpp:119
std::function< void(Emx::ErrCodeE e, uint32_t clientId, uint32_t module, uint32_t method, int32_t chn, const char *data, int32_t size)> RecvRespCallback
接收到响应数据回调
Definition: MsgRpc.hpp:74
void OnRecv(const char *data, int32_t size) override
同步阻塞RPC请求
Definition: MsgRpc.hpp:39
static ErrCodeE Request(uint32_t dstClientId, uint32_t module, uint32_t method, int32_t chn, const char *req=nullptr, int32_t size=0, std::string *resp=nullptr, int32_t timeoutMs=10000)
发起同步阻塞RPC请求,比较耗时耗资源,尽量使用MsgRpcReqAsync异步请求
用于MsgRpc通信的数据类型定义
Definition: MsgRpc.hpp:16
ClientTypeE
RPC客户端类型
Definition: MsgRpc.hpp:19
ErrCodeE
错误码定义
Definition: EmxTypeDef.hpp:29
Definition: EmxGpio.hpp:10
启动异步响应监听时携带的配置参数
Definition: MsgRpc.hpp:152
RecvReqCallback OnRecvReq
注册一个用于接收请求消息的回调
Definition: MsgRpc.hpp:159
Callback OnDisConnected
注册一个当与MsgRpcServer断开连接后的回调
Definition: MsgRpc.hpp:158
Callback OnConnected
注册一个当与MsgRpcServer成功建立连接后的回调
Definition: MsgRpc.hpp:157
EuvLoop * loop
需要绑定的loop
Definition: MsgRpc.hpp:153
char * buffer
需要提供一个buffer来接收数据
Definition: MsgRpc.hpp:155
uint32_t clientId
此响应端的ClientID
Definition: MsgRpc.hpp:154
int32_t size
buffer的大小
Definition: MsgRpc.hpp:156
启动异步请求时携带的配置参数
Definition: MsgRpc.hpp:77
EuvLoop * loop
需要绑定的loop
Definition: MsgRpc.hpp:78
char * buffer
需要提供一个buffer来接收数据
Definition: MsgRpc.hpp:79
RecvRespCallback OnRecvResp
注册一个用于接收响应消息的回调
Definition: MsgRpc.hpp:83
int32_t size
buffer的大小
Definition: MsgRpc.hpp:80
Callback OnDisConnected
注册一个当与MsgRpcServer断开连接后的回调
Definition: MsgRpc.hpp:82
Callback OnConnected
注册一个当与MsgRpcServer成功建立连接后的回调,连接成功后才能发送请求
Definition: MsgRpc.hpp:81
RPC请求的数据协议头
Definition: MsgRpc.hpp:25
int32_t chn
Definition: MsgRpc.hpp:32
uint32_t respClientId
Definition: MsgRpc.hpp:28
uint32_t reqClientId
Definition: MsgRpc.hpp:27
uint32_t module
Definition: MsgRpc.hpp:30
uint32_t sync
Definition: MsgRpc.hpp:26
ErrCodeE code
Definition: MsgRpc.hpp:33
uint32_t size
Definition: MsgRpc.hpp:34
uint32_t method
Definition: MsgRpc.hpp:31
uint32_t sessionId
Definition: MsgRpc.hpp:29