Rapsssito / react-native-tcp-socket

React Native TCP socket API for Android, iOS & macOS with SSL/TLS support.
MIT License
303 stars 81 forks source link

android close on reload #178

Closed mo22 closed 10 months ago

mo22 commented 11 months ago

close all sockets on reload

--- a/node_modules/react-native-tcp-socket/android/src/main/java/com/asterinet/react/tcpsocket/TcpSocketModule.java
+++ b/node_modules/react-native-tcp-socket/android/src/main/java/com/asterinet/react/tcpsocket/TcpSocketModule.java
@@ -18,6 +18,7 @@ import com.facebook.react.bridge.ReactMethod;
 import com.facebook.react.bridge.ReadableMap;

 import java.io.IOException;
+import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.ExecutorService;
@@ -47,6 +48,24 @@ public class TcpSocketModule extends ReactContextBaseJavaModule {
         tcpEvtListener = new TcpEventListener(mReactContext);
     }

+    @Override
+    public void onCatalystInstanceDestroy() {
+        super.onCatalystInstanceDestroy();
+        executorService.execute(new Runnable() {
+            @Override
+            public void run() {
+                for (Map.Entry<Integer, TcpSocket> entry : socketMap.entrySet()) {
+                    if (entry.getValue() instanceof TcpSocketServer) {
+                        ((TcpSocketServer)entry.getValue()).close();
+                    } else if (entry.getValue() instanceof TcpSocketClient) {
+                        ((TcpSocketClient)entry.getValue()).destroy();
+                    }
+                }
+                socketMap.clear();
+            }
+        });
+    }
+
     @Override
     public @NonNull
     String getName() {
Rapsssito commented 10 months ago

Hi @mo22,

Could you please create a PR instead of an issue with this feature?