EuvTcp.hpp
1 //
2 // Created by xiong on 2020/11/6.
3 //
4 
5 #ifndef EMX_EUVTCP_HPP
6 #define EMX_EUVTCP_HPP
7 
8 #include "EuvLoop.hpp"
9 #include "EuvStmClientBase.hpp"
10 #include "EuvStmServerBase.hpp"
11 
12 namespace Emx {
18  class EuvTcp : public EuvStreamInf {
19  public:
20  EuvTcp() : m_tcp(nullptr) {}
21 
22  virtual ~EuvTcp() {
23  DoDestroy();
24  }
25 
31  ErrCodeE Create(EuvLoop &loop) override;
32 
34  void Destroy() override { DoDestroy(); }
35 
42  ErrCodeE Bind(const char *ip, uint16_t port) override;
43 
49  ErrCodeE Open(int fd) override;
50 
59  ErrCodeE Connect(uv_connect_t *req,
60  const char *serverIp, uint16_t serverPort,
61  uv_connect_cb cb) override;
62 
69  ErrCodeE GetSockName(void *name, size_t &len) override;
70 
77  ErrCodeE GetPeerName(void *name, size_t &len) override;
78 
83  uv_stream_t *GetStm() override { return (uv_stream_t *) m_tcp; }
84 
89  int32_t GetFd() override { return m_tcp->io_watcher.fd; }
90 
95  bool IsReceiving() override { return (m_tcp->flags & 0x00001000); }
96 
97  private:
98  static void OnDestroy(uv_handle_t *handle);
99 
100  void DoDestroy();
101 
102  private:
103  uv_tcp_t *m_tcp;
104  };
105 
111  public:
113 
114  virtual ~EuvTcpClientBase() {};
115 
116  private:
117  EuvTcp m_tcp;
118  };
119 
125  public:
127 
128  virtual ~EuvTcpServerClient() {};
129 
130  private:
131  EuvTcp m_tcp;
132  };
133 
139  public:
141 
142  virtual ~EuvTcpServerHost() {};
143 
144  private:
145  EuvTcp m_tcp;
146  };
148 }
149 
150 #endif //EMX_EUVTCP_HPP
实现多路复用循环的主体,所有基于EuvLoop的事件都应绑定到一个EuvLoop上
Definition: EuvLoop.hpp:18
面向连接的socket通信Client端基类,实现了这种类型客户端的创建销毁发送接收, 内部使用EuvStreamInf抽象接口作为底层通信接口,实际实现客户端的时候,需要传入继承EuvStreamIn...
Definition: EuvStmClientBase.hpp:21
面向连接的socket通信ServerClient端基类,是服务端accept后的socket, 实现了这种类型ServerClient端的创建销毁发送接收, 内部使用EuvStreamInf抽象接口作...
Definition: EuvStmServerBase.hpp:100
面向连接的socket通信ServerHost端基类,是服务端的监听socket,实现了这种类型ServerHost端的创建销毁发送接收, 内部使用EuvStreamInf抽象接口作为底层通信接口,实际...
Definition: EuvStmServerBase.hpp:23
面向链接类型的抽象接口(例如tcp/pipe),用于为EuvStmClientBase/EuvStmServerHostBase等提供统一的底层通信接口
Definition: EuvStreamInf.hpp:17
使用EuvTcp作为EuvStreamInf,并且继承EuvStmClientBase, 形成以TCP为底层通信机制面向连接的客户端
Definition: EuvTcp.hpp:110
virtual ~EuvTcpClientBase()
Definition: EuvTcp.hpp:114
EuvTcpClientBase()
Definition: EuvTcp.hpp:112
使用EuvTcp作为EuvStreamInf,并且继承EuvStmServerClientBase, 形成以TCP为底层通信机制面向连接的ServerClient端
Definition: EuvTcp.hpp:124
virtual ~EuvTcpServerClient()
Definition: EuvTcp.hpp:128
EuvTcpServerClient(EuvStmServerHostBase *host)
Definition: EuvTcp.hpp:126
使用EuvTcp作为EuvStreamInf,并且继承EuvStmServerHostBase, 形成以TCP为底层通信机制面向连接的ServerHost端
Definition: EuvTcp.hpp:138
EuvTcpServerHost()
Definition: EuvTcp.hpp:140
virtual ~EuvTcpServerHost()
Definition: EuvTcp.hpp:142
以tcp为底层通信基础实现接口类EuvStreamInf。
Definition: EuvTcp.hpp:18
uv_stream_t * GetStm() override
获取libuv的stream句柄
Definition: EuvTcp.hpp:83
EuvTcp()
Definition: EuvTcp.hpp:20
ErrCodeE Create(EuvLoop &loop) override
创建并初始化tcp
ErrCodeE GetPeerName(void *name, size_t &len) override
获取对方地址
ErrCodeE GetSockName(void *name, size_t &len) override
获取本地地址
virtual ~EuvTcp()
Definition: EuvTcp.hpp:22
int32_t GetFd() override
获取文件描述符fd
Definition: EuvTcp.hpp:89
void Destroy() override
销毁tcp
Definition: EuvTcp.hpp:34
bool IsReceiving() override
获取当前描述符是否监听接收
Definition: EuvTcp.hpp:95
ErrCodeE Bind(const char *ip, uint16_t port) override
绑定此tcp到指定的本地地址
ErrCodeE Connect(uv_connect_t *req, const char *serverIp, uint16_t serverPort, uv_connect_cb cb) override
连接到服务端
ErrCodeE Open(int fd) override
打开一个已经存在的fd
ErrCodeE
错误码定义
Definition: EmxTypeDef.hpp:29
Definition: EmxGpio.hpp:10