ithewei před 2 roky
rodič
revize
919b772883
2 změnil soubory, kde provedl 28 přidání a 20 odebrání
  1. 14 10
      evpp/UdpClient.h
  2. 14 10
      evpp/UdpServer.h

+ 14 - 10
evpp/UdpClient.h

@@ -17,11 +17,14 @@ public:
         loop_ = loop ? loop : std::make_shared<EventLoop>();
         remote_port = 0;
 #if WITH_KCP
-        enable_kcp = false;
+        kcp_setting = NULL;
 #endif
     }
 
     virtual ~UdpClientEventLoopTmpl() {
+#if WITH_KCP
+        HV_FREE(kcp_setting);
+#endif
     }
 
     const EventLoopPtr& loop() {
@@ -89,8 +92,8 @@ public:
             }
         };
 #if WITH_KCP
-        if (enable_kcp) {
-            hio_set_kcp(channel->io(), &kcp_setting);
+        if (kcp_setting) {
+            hio_set_kcp(channel->io(), kcp_setting);
         }
 #endif
         return channel->startRead();
@@ -122,12 +125,14 @@ public:
 
 #if WITH_KCP
     void setKcp(kcp_setting_t* setting) {
-        if (setting) {
-            enable_kcp = true;
-            kcp_setting = *setting;
-        } else {
-            enable_kcp = false;
+        if (setting == NULL) {
+            HV_FREE(kcp_setting);
+            return;
+        }
+        if (kcp_setting == NULL) {
+            HV_ALLOC_SIZEOF(kcp_setting);
         }
+        *kcp_setting = *setting;
     }
 #endif
 
@@ -138,8 +143,7 @@ public:
     int                     remote_port;
 
 #if WITH_KCP
-    bool                    enable_kcp;
-    kcp_setting_t           kcp_setting;
+    kcp_setting_t*          kcp_setting;
 #endif
     // Callback
     std::function<void(const TSocketChannelPtr&, Buffer*)>  onMessage;

+ 14 - 10
evpp/UdpServer.h

@@ -17,11 +17,14 @@ public:
         loop_ = loop ? loop : std::make_shared<EventLoop>();
         port = 0;
 #if WITH_KCP
-        enable_kcp = false;
+        kcp_setting = NULL;
 #endif
     }
 
     virtual ~UdpServerEventLoopTmpl() {
+#if WITH_KCP
+        HV_FREE(kcp_setting);
+#endif
     }
 
     const EventLoopPtr& loop() {
@@ -66,8 +69,8 @@ public:
             }
         };
 #if WITH_KCP
-        if (enable_kcp) {
-            hio_set_kcp(channel->io(), &kcp_setting);
+        if (kcp_setting) {
+            hio_set_kcp(channel->io(), kcp_setting);
         }
 #endif
         return channel->startRead();
@@ -99,12 +102,14 @@ public:
 
 #if WITH_KCP
     void setKcp(kcp_setting_t* setting) {
-        if (setting) {
-            enable_kcp = true;
-            kcp_setting = *setting;
-        } else {
-            enable_kcp = false;
+        if (setting == NULL) {
+            HV_FREE(kcp_setting);
+            return;
+        }
+        if (kcp_setting == NULL) {
+            HV_ALLOC_SIZEOF(kcp_setting);
         }
+        *kcp_setting = *setting;
     }
 #endif
 
@@ -113,8 +118,7 @@ public:
     int                     port;
     TSocketChannelPtr       channel;
 #if WITH_KCP
-    bool                    enable_kcp;
-    kcp_setting_t           kcp_setting;
+    kcp_setting_t*          kcp_setting;
 #endif
     // Callback
     std::function<void(const TSocketChannelPtr&, Buffer*)>  onMessage;