1
0
Эх сурвалжийг харах

Add Channel::isWriteComplete

ithewei 3 жил өмнө
parent
commit
7209e2b557

+ 3 - 0
event/hloop.h

@@ -263,8 +263,11 @@ HV_EXPORT bool hio_is_closed(hio_t* io);
 // #include "hbuf.h"
 typedef struct fifo_buf_s hio_readbuf_t;
 HV_EXPORT hio_readbuf_t* hio_get_readbuf(hio_t* io);
+// NOTE: hio_write is non-blocking, so there is a write queue inside hio_t to cache unwritten data and wait for writable.
+// @return current buffer size of write queue.
 HV_EXPORT size_t   hio_write_bufsize(hio_t* io);
 #define hio_write_queue_is_empty(io) (hio_write_bufsize(io) == 0)
+#define hio_write_is_complete(io)    (hio_write_bufsize(io) == 0)
 HV_EXPORT uint64_t hio_last_read_time(hio_t* io);   // ms
 HV_EXPORT uint64_t hio_last_write_time(hio_t* io);  // ms
 

+ 8 - 0
evpp/Channel.h

@@ -125,6 +125,14 @@ public:
         return write(str.data(), str.size());
     }
 
+    size_t writeBufsize() {
+        if (io_ == NULL) return 0;
+        return hio_write_bufsize(io_);
+    }
+    bool isWriteComplete() {
+        return writeBufsize() == 0;
+    }
+
     // close thread-safe
     int close(bool async = false) {
         if (!isOpened()) return -1;

+ 1 - 0
evpp/TcpClient.h

@@ -211,6 +211,7 @@ public:
     // Callback
     std::function<void(const TSocketChannelPtr&)>           onConnection;
     std::function<void(const TSocketChannelPtr&, Buffer*)>  onMessage;
+    // NOTE: Use Channel::isWriteComplete in onWriteComplete callback to determine whether all data has been written.
     std::function<void(const TSocketChannelPtr&, Buffer*)>  onWriteComplete;
 
 private:

+ 1 - 0
evpp/TcpServer.h

@@ -205,6 +205,7 @@ public:
     // Callback
     std::function<void(const TSocketChannelPtr&)>           onConnection;
     std::function<void(const TSocketChannelPtr&, Buffer*)>  onMessage;
+    // NOTE: Use Channel::isWriteComplete in onWriteComplete callback to determine whether all data has been written.
     std::function<void(const TSocketChannelPtr&, Buffer*)>  onWriteComplete;
 
     uint32_t                max_connections;

+ 1 - 0
evpp/UdpClient.h

@@ -101,6 +101,7 @@ public:
 #endif
     // Callback
     std::function<void(const TSocketChannelPtr&, Buffer*)>  onMessage;
+    // NOTE: Use Channel::isWriteComplete in onWriteComplete callback to determine whether all data has been written.
     std::function<void(const TSocketChannelPtr&, Buffer*)>  onWriteComplete;
 
 private:

+ 1 - 0
evpp/UdpServer.h

@@ -90,6 +90,7 @@ public:
 #endif
     // Callback
     std::function<void(const TSocketChannelPtr&, Buffer*)>  onMessage;
+    // NOTE: Use Channel::isWriteComplete in onWriteComplete callback to determine whether all data has been written.
     std::function<void(const TSocketChannelPtr&, Buffer*)>  onWriteComplete;
 
 private: