Browse Source

HV_EXPORT hio_getcb_xxx

hewei.it 4 years ago
parent
commit
5e003585a3
3 changed files with 36 additions and 3 deletions
  1. 20 0
      event/hevent.c
  2. 6 0
      event/hloop.h
  3. 10 3
      evpp/Channel.h

+ 20 - 0
event/hevent.c

@@ -53,6 +53,26 @@ void* hio_context(hio_t* io) {
     return io->ctx;
 }
 
+haccept_cb  hio_getcb_accept(hio_t* io) {
+    return io->accept_cb;
+}
+
+hconnect_cb hio_getcb_connect(hio_t* io) {
+    return io->connect_cb;
+}
+
+hread_cb    hio_getcb_read(hio_t* io) {
+    return io->read_cb;
+}
+
+hwrite_cb   hio_getcb_write(hio_t* io) {
+    return io->write_cb;
+}
+
+hclose_cb   hio_getcb_close(hio_t* io) {
+    return io->close_cb;
+}
+
 void hio_setcb_accept   (hio_t* io, haccept_cb  accept_cb) {
     io->accept_cb = accept_cb;
 }

+ 6 - 0
event/hloop.h

@@ -223,6 +223,12 @@ HV_EXPORT void hio_setcb_connect  (hio_t* io, hconnect_cb connect_cb);
 HV_EXPORT void hio_setcb_read     (hio_t* io, hread_cb    read_cb);
 HV_EXPORT void hio_setcb_write    (hio_t* io, hwrite_cb   write_cb);
 HV_EXPORT void hio_setcb_close    (hio_t* io, hclose_cb   close_cb);
+// get callbacks
+HV_EXPORT haccept_cb  hio_getcb_accept(hio_t* io);
+HV_EXPORT hconnect_cb hio_getcb_connect(hio_t* io);
+HV_EXPORT hread_cb    hio_getcb_read(hio_t* io);
+HV_EXPORT hwrite_cb   hio_getcb_write(hio_t* io);
+HV_EXPORT hclose_cb   hio_getcb_close(hio_t* io);
 
 // some useful settings
 // Enable SSL/TLS is so easy :)

+ 10 - 3
evpp/Channel.h

@@ -22,10 +22,17 @@ public:
         if (io) {
             fd_ = hio_fd(io);
             id_ = hio_id(io);
+            ctx_ = hio_context(io);
             hio_set_context(io, this);
-            hio_setcb_read(io_, on_read);
-            hio_setcb_write(io_, on_write);
-            hio_setcb_close(io_, on_close);
+            if (hio_getcb_read(io) == NULL) {
+                hio_setcb_read(io_, on_read);
+            }
+            if (hio_getcb_write(io) == NULL) {
+                hio_setcb_write(io_, on_write);
+            }
+            if (hio_getcb_close(io) == NULL) {
+                hio_setcb_close(io_, on_close);
+            }
         }
         status = isOpened() ? OPENED : CLOSED;
     }