EuvPipe.hpp
1 //
2 // Created by xiong on 2020/10/23.
3 //
4 
5 #ifndef EMX_EUVPIPE_HPP
6 #define EMX_EUVPIPE_HPP
7 
8 #include "EuvLoop.hpp"
9 #include "EuvStmClientBase.hpp"
10 #include "EuvStmServerBase.hpp"
11 
12 namespace Emx {
18  class EuvPipe : public EuvStreamInf {
19  public:
20  EuvPipe() : m_pipe(nullptr) {}
21 
22  virtual ~EuvPipe() {
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 
52  ErrCodeE Connect(uv_connect_t *req,
53  const char *serverIp, uint16_t serverPort,
54  uv_connect_cb cb) override;
55 
62  ErrCodeE GetSockName(void *name, size_t &len) override;
63 
70  ErrCodeE GetPeerName(void *name, size_t &len) override;
71 
76  uv_stream_t *GetStm() override { return (uv_stream_t *) m_pipe; }
77 
82  int32_t GetFd() override { return m_pipe->io_watcher.fd; }
83 
88  bool IsReceiving() override { return (m_pipe->flags & 0x00001000); }
89 
90  private:
91  static void OnDestroy(uv_handle_t *handle);
92 
93  void DoDestroy();
94 
95  private:
96  uv_pipe_t *m_pipe;
97  };
98 
104  public:
106 
107  virtual ~EuvPipeClientBase() {};
108  private:
109  EuvPipe m_pipe;
110  };
111 
117  public:
119 
120  virtual ~EuvPipeServerClient() {};
121 
122  private:
123  EuvPipe m_pipe;
124  };
125 
131  public:
133 
134  virtual ~EuvPipeServerHost() {};
135 
136  private:
137  EuvPipe m_pipe;
138  };
139 
141 }
142 
143 
144 #endif //EMX_EUVPIPE_HPP
实现多路复用循环的主体,所有基于EuvLoop的事件都应绑定到一个EuvLoop上
Definition: EuvLoop.hpp:18
使用EuvPipe作为EuvStreamInf,并且继承EuvStmClientBase, 形成以Pipe为底层通信机制面向连接的客户端
Definition: EuvPipe.hpp:103
EuvPipeClientBase()
Definition: EuvPipe.hpp:105
virtual ~EuvPipeClientBase()
Definition: EuvPipe.hpp:107
使用EuvPipe作为EuvStreamInf,并且继承EuvStmServerClientBase, 形成以Pipe为底层通信机制面向连接的ServerClient端
Definition: EuvPipe.hpp:116
virtual ~EuvPipeServerClient()
Definition: EuvPipe.hpp:120
EuvPipeServerClient(EuvStmServerHostBase *host)
Definition: EuvPipe.hpp:118
使用EuvTcp作为EuvStreamInf,并且继承EuvStmServerHostBase, 形成以TCP为底层通信机制面向连接的ServerHost端
Definition: EuvPipe.hpp:130
virtual ~EuvPipeServerHost()
Definition: EuvPipe.hpp:134
EuvPipeServerHost()
Definition: EuvPipe.hpp:132
以pipe为底层通信基础实现接口类EuvStreamInf,pipe的底层使用STREAM+AF_UNIX的方式进行通信。
Definition: EuvPipe.hpp:18
ErrCodeE GetSockName(void *name, size_t &len) override
获取本地AF_UNIX地址
virtual ~EuvPipe()
Definition: EuvPipe.hpp:22
ErrCodeE GetPeerName(void *name, size_t &len) override
获取对端AF_UNIX地址
EuvPipe()
Definition: EuvPipe.hpp:20
ErrCodeE Create(EuvLoop &loop) override
创建并初始化Pipe
int32_t GetFd() override
获取文件描述符fd
Definition: EuvPipe.hpp:82
void Destroy() override
销毁Pipe
Definition: EuvPipe.hpp:34
uv_stream_t * GetStm() override
获取libuv的stream句柄
Definition: EuvPipe.hpp:76
ErrCodeE Connect(uv_connect_t *req, const char *serverIp, uint16_t serverPort, uv_connect_cb cb) override
连接到服务端
bool IsReceiving() override
获取当前描述符是否监听接收
Definition: EuvPipe.hpp:88
ErrCodeE Bind(const char *ip, uint16_t port) override
绑定此Pipe到指定的本地地址
面向连接的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
ErrCodeE
错误码定义
Definition: EmxTypeDef.hpp:29
Definition: EmxGpio.hpp:10