diff --git a/android/build.gradle b/android/build.gradle index 41a6e7e..5143ba4 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -22,5 +22,5 @@ android { } dependencies { - compile 'com.facebook.react:react-native:+' + implementation 'com.facebook.react:react-native:+' } diff --git a/android/src/main/java/com/staltz/react/workers/WorkersInstance.java b/android/src/main/java/com/staltz/react/workers/WorkersInstance.java index 7c08174..8a4ec10 100644 --- a/android/src/main/java/com/staltz/react/workers/WorkersInstance.java +++ b/android/src/main/java/com/staltz/react/workers/WorkersInstance.java @@ -24,7 +24,6 @@ import com.facebook.react.modules.systeminfo.AndroidInfoHelpers; import com.facebook.react.packagerconnection.PackagerConnectionSettings; import com.facebook.react.shell.MainReactPackage; -import com.facebook.react.uimanager.UIImplementationProvider; import static com.facebook.infer.annotation.ThreadConfined.UI; import java.util.ArrayList; @@ -164,11 +163,6 @@ protected List getPackages() { allPackages.add(0, new MainReactPackage()); return allPackages; } - - @Override - protected UIImplementationProvider getUIImplementationProvider() { - return null; - } }; } diff --git a/android/src/main/java/com/staltz/react/workers/WorkersInstanceManager.java b/android/src/main/java/com/staltz/react/workers/WorkersInstanceManager.java index 7ddfb40..6adda03 100644 --- a/android/src/main/java/com/staltz/react/workers/WorkersInstanceManager.java +++ b/android/src/main/java/com/staltz/react/workers/WorkersInstanceManager.java @@ -11,9 +11,11 @@ import com.facebook.react.bridge.ReactContextBaseJavaModule; import com.facebook.react.bridge.ReactMethod; import com.facebook.react.bridge.WritableMap; +import com.facebook.react.module.annotations.ReactModule; import javax.annotation.Nullable; +@ReactModule(name="WorkersInstanceManager") public class WorkersInstanceManager extends ReactContextBaseJavaModule { private final ReactContext context; diff --git a/android/src/main/java/com/staltz/react/workers/WorkersManager.java b/android/src/main/java/com/staltz/react/workers/WorkersManager.java index 5e28ee2..d42378a 100644 --- a/android/src/main/java/com/staltz/react/workers/WorkersManager.java +++ b/android/src/main/java/com/staltz/react/workers/WorkersManager.java @@ -13,7 +13,7 @@ import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContextBaseJavaModule; import com.facebook.react.bridge.ReactMethod; -import com.facebook.react.modules.systeminfo.AndroidInfoHelpers; +import com.facebook.react.module.annotations.ReactModule; import java.util.ArrayList; import java.util.HashMap; @@ -21,17 +21,24 @@ import javax.annotation.Nullable; +@ReactModule(name = "WorkersManager") public class WorkersManager extends ReactContextBaseJavaModule { private final ReactApplicationContext context; private final ReactPackage packages[]; + private Integer key; + private String bundleRoot; + private String bundleResource; + private Integer bundlerPort; + private Promise promise; private final HashMap workers = new HashMap<>(); private final List bundlerPorts = new ArrayList<>(); + public WorkersManager( - final ReactApplicationContext context, - final ReactPackage packages[] + final ReactApplicationContext context, + final ReactPackage packages[] ) { super(context); this.context = context; @@ -49,24 +56,30 @@ public String getName() { @ReactMethod public void startWorker( - final Integer key, - final String bundleRoot, - final String bundleResource, - final Integer bundlerPort, - final Promise promise + final Integer key, + final String bundleRoot, + final String bundleResource, + final Integer bundlerPort, + final Promise promise ) { Assertions.assertCondition(!this.workers.containsKey(key), "Key already in use"); + this.key = key; + this.bundleRoot = bundleRoot; + this.bundleResource = bundleResource; + this.bundlerPort = bundlerPort; + this.promise = promise; + final boolean hasBundlerPort = this.allocateBundlerPort(bundlerPort); final WorkersInstance worker = new WorkersInstance( - key, - context, - this.packages, - bundleRoot, - bundleResource, - hasBundlerPort ? bundlerPort : null, - promise + key, + context, + this.packages, + bundleRoot, + bundleResource, + hasBundlerPort ? bundlerPort : null, + promise ); this.workers.put(key, worker); @@ -81,20 +94,16 @@ public void run() { @ReactMethod public void stopWorker(final Integer key) { - final WorkersInstance worker = this.workers.remove(key); - Assertions.assertNotNull(worker); - - new Handler(Looper.getMainLooper()).post(new Runnable() { - @Override - public void run() { - worker.stop(); - } - }); + this.workers.remove(key); } @ReactMethod public void postMessage(final Integer key, final String message) { - final WorkersInstance worker = this.workers.get(key); + WorkersInstance worker = this.workers.get(key); + if (worker == null) { + startWorker(this.key, this.bundleRoot, this.bundleResource, this.bundlerPort, this.promise); + worker = this.workers.get(key); + } Assertions.assertNotNull(worker).postMessage(message); } @@ -108,8 +117,8 @@ private interface RCTDeviceEventEmitter extends JavaScriptModule { protected void emit(final String name, final Object body) { this.context - .getJSModule(WorkersManager.RCTDeviceEventEmitter.class) - .emit(name, body); + .getJSModule(WorkersManager.RCTDeviceEventEmitter.class) + .emit(name, body); } /** diff --git a/package-lock.json b/package-lock.json index 6f6afac..8055775 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { "name": "react-native-workers", - "version": "0.4.6", + "version": "0.6.1", "lockfileVersion": 1 } diff --git a/package.json b/package.json index 421105e..a8ecadf 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-native-workers", - "version": "0.6.0", + "version": "0.6.6-gl-007", "description": "React Native web workers", "author": "Garrett Mitchell", "license": "MIT",