EuvStmClientBase.hpp
1 //
2 // Created by xiong on 2020/10/23.
3 //
4 
5 #ifndef EMX_EUVSTMCLIENTBASE_HPP
6 #define EMX_EUVSTMCLIENTBASE_HPP
7 
8 #include <memory>
9 #include "EuvStreamInf.hpp"
10 
11 namespace Emx {
22  public:
23 
24  EuvStmClientBase(EuvStreamInf *stm) : m_stm(stm) {
25  m_isConnected = false;
26  }
27 
28  virtual ~EuvStmClientBase() {}
29 
42  ErrCodeE Create(EuvLoop &loop, char *buffer, int32_t size,
43  const char *serverIp, uint16_t serverPort,
44  const char *localIp = nullptr, uint16_t localPort = 0);
45 
47  void Destroy();
48 
54  ErrCodeE Send(std::shared_ptr<std::string> &data);
55 
57  void PauseRecv();
58 
64 
69  bool IsReceiving() { return m_stm->IsReceiving(); }
70 
75  std::string GetSockName() {
76  char name[EMX_MAX_PATH_SIZE] = {};
77  size_t size = EMX_MAX_PATH_SIZE;
78  m_stm->GetSockName(name, size);
79  return name;
80  }
81 
86  std::string GetPeerName() {
87  char name[EMX_MAX_PATH_SIZE] = {};
88  size_t size = EMX_MAX_PATH_SIZE;
89  m_stm->GetPeerName(name, size);
90  return name;
91  }
92 
93  protected:
94 
96  virtual void OnConnect() = 0;
97 
99  virtual void OnDisConnect() = 0;
100 
106  virtual void OnRecv(const char *data, int32_t size) {};
107 
114  virtual void OnSendDone(ErrCodeE e, const char *buffer, int32_t size) {};
115  private:
116  struct WriteReq {
117  uv_write_t req;
118  uv_buf_t buf;
119  std::shared_ptr<std::string> data;
120  EuvStmClientBase *obj;
121  };
122  private:
123  bool m_isConnected;
124  char *m_buffer;
125  int32_t m_size;
126  EuvStreamInf *m_stm;
127  };
129 }
130 
131 #endif //EMX_EUVSTMCLIENTBASE_HPP
实现多路复用循环的主体,所有基于EuvLoop的事件都应绑定到一个EuvLoop上
Definition: EuvLoop.hpp:18
面向连接的socket通信Client端基类,实现了这种类型客户端的创建销毁发送接收, 内部使用EuvStreamInf抽象接口作为底层通信接口,实际实现客户端的时候,需要传入继承EuvStreamIn...
Definition: EuvStmClientBase.hpp:21
virtual ~EuvStmClientBase()
Definition: EuvStmClientBase.hpp:28
ErrCodeE ResumeRecv()
开始接收数据/重新开始接收数据
virtual void OnSendDone(ErrCodeE e, const char *buffer, int32_t size)
当调用Send函数发送的数据成功发送至服务端,或出现错误时触发次回调
Definition: EuvStmClientBase.hpp:114
std::string GetSockName()
获取本地地址
Definition: EuvStmClientBase.hpp:75
virtual void OnConnect()=0
当与服务端的链接建立成功后触发此函数的调用
ErrCodeE Send(std::shared_ptr< std::string > &data)
向服务端发送数据
ErrCodeE Create(EuvLoop &loop, char *buffer, int32_t size, const char *serverIp, uint16_t serverPort, const char *localIp=nullptr, uint16_t localPort=0)
创建客户端并连接服务端
bool IsReceiving()
获取当前客户端是否正在监听接收
Definition: EuvStmClientBase.hpp:69
virtual void OnRecv(const char *data, int32_t size)
当有数据到来时触发此函数的调用
Definition: EuvStmClientBase.hpp:106
EuvStmClientBase(EuvStreamInf *stm)
Definition: EuvStmClientBase.hpp:24
std::string GetPeerName()
获取对方地址
Definition: EuvStmClientBase.hpp:86
void PauseRecv()
停止接收,调用后将不会收到数据
virtual void OnDisConnect()=0
当与服务端的链接断开后触发此函数的调用
void Destroy()
断开链接并销毁客户端
面向链接类型的抽象接口(例如tcp/pipe),用于为EuvStmClientBase/EuvStmServerHostBase等提供统一的底层通信接口
Definition: EuvStreamInf.hpp:17
virtual bool IsReceiving()=0
获取当前描述符是否监听接收
virtual ErrCodeE GetSockName(void *name, size_t &len)=0
获取本地地址
virtual ErrCodeE GetPeerName(void *name, size_t &len)=0
获取对方地址
ErrCodeE
错误码定义
Definition: EmxTypeDef.hpp:29
Definition: EmxGpio.hpp:10