diff --git a/android/src/main/java/co/apptailor/Worker/JSWorker.java b/android/src/main/java/co/apptailor/Worker/JSWorker.java index 2bb7546..5870316 100644 --- a/android/src/main/java/co/apptailor/Worker/JSWorker.java +++ b/android/src/main/java/co/apptailor/Worker/JSWorker.java @@ -39,25 +39,29 @@ public void runFromContext(ReactApplicationContext context, ReactContextBuilder } public void postMessage(String message) { - reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class) + if(reactContext!=null){ + reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class) .emit("WorkerMessage", message); + } } public void onHostResume() { - reactContext.onHostResume(null); + if(reactContext!=null){ + reactContext.onHostResume(null); + } } public void onHostPause() { - reactContext.onHostPause(); + if(reactContext!=null){ + reactContext.onHostPause(); + } } public void terminate() { - if (reactContext == null) { - return; + if (reactContext != null) { + reactContext.onHostPause(); + reactContext.destroy(); + reactContext = null; } - - reactContext.onHostPause(); - reactContext.destroy(); - reactContext = null; } } diff --git a/android/src/main/java/co/apptailor/Worker/WorkerModule.java b/android/src/main/java/co/apptailor/Worker/WorkerModule.java index fa1bb40..da521dc 100644 --- a/android/src/main/java/co/apptailor/Worker/WorkerModule.java +++ b/android/src/main/java/co/apptailor/Worker/WorkerModule.java @@ -7,7 +7,7 @@ import com.facebook.react.ReactApplication; import com.facebook.react.ReactInstanceManager; import com.facebook.react.ReactPackage; -import com.facebook.react.bridge.JSBundleLoader; +import com.facebook.react.cxxbridge.JSBundleLoader; import com.facebook.react.bridge.LifecycleEventListener; import com.facebook.react.bridge.Promise; import com.facebook.react.bridge.ReactApplicationContext; @@ -149,7 +149,8 @@ public void onHostDestroy() { @Override public void run() { for (int workerId : workers.keySet()) { - workers.get(workerId).terminate(); + //workers.get(workerId).terminate(); + stopWorker(workerId); } } }); @@ -177,7 +178,8 @@ private JSBundleLoader createDevBundleLoader(String jsFileName, String jsFileSlu private JSBundleLoader createReleaseBundleLoader(String jsFileName, String jsFileSlug) { Log.d(TAG, "createReleaseBundleLoader - reading file from assets"); - return JSBundleLoader.createFileLoader(getReactApplicationContext(), "assets://workers/" + jsFileSlug + ".bundle"); + //return JSBundleLoader.createFileLoader(getReactApplicationContext(), "assets://workers/" + jsFileSlug + ".bundle"); + return JSBundleLoader.createFileLoader("assets://workers/" + jsFileSlug + ".bundle"); } private ReactInstanceManager getReactInstanceManager() { diff --git a/android/src/main/java/co/apptailor/Worker/core/ReactContextBuilder.java b/android/src/main/java/co/apptailor/Worker/core/ReactContextBuilder.java index a06b6ca..7b0835b 100644 --- a/android/src/main/java/co/apptailor/Worker/core/ReactContextBuilder.java +++ b/android/src/main/java/co/apptailor/Worker/core/ReactContextBuilder.java @@ -2,23 +2,28 @@ import android.content.Context; +import com.facebook.react.EagerModuleProvider; import com.facebook.react.ReactPackage; import com.facebook.react.bridge.CatalystInstance; -import com.facebook.react.bridge.CatalystInstanceImpl; -import com.facebook.react.bridge.JSBundleLoader; -import com.facebook.react.bridge.JSCJavaScriptExecutor; -import com.facebook.react.bridge.JavaScriptExecutor; +import com.facebook.react.cxxbridge.CatalystInstanceImpl; +import com.facebook.react.cxxbridge.JSBundleLoader; +import com.facebook.react.cxxbridge.JSCJavaScriptExecutor; +import com.facebook.react.cxxbridge.JavaScriptExecutor; import com.facebook.react.bridge.JavaScriptModule; import com.facebook.react.bridge.JavaScriptModuleRegistry; +import com.facebook.react.module.model.ReactModuleInfo; +import com.facebook.react.bridge.ModuleSpec; import com.facebook.react.bridge.NativeModule; import com.facebook.react.bridge.NativeModuleCallExceptionHandler; -import com.facebook.react.bridge.NativeModuleRegistry; +import com.facebook.react.cxxbridge.NativeModuleRegistry; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.WritableNativeMap; import com.facebook.react.bridge.queue.ReactQueueConfigurationSpec; import com.facebook.react.devsupport.DevSupportManager; import com.facebook.soloader.SoLoader; +import java.util.Collections; +import java.util.List; import java.util.ArrayList; import java.util.concurrent.Callable; @@ -50,7 +55,8 @@ public ReactContextBuilder setReactPackages(ArrayList reactPackage } public ReactApplicationContext build() throws Exception { - JavaScriptExecutor jsExecutor = new JSCJavaScriptExecutor.Factory().create(new WritableNativeMap()); + //JavaScriptExecutor jsExecutor = new JSCJavaScriptExecutor.Factory().create(new WritableNativeMap()); + JavaScriptExecutor jsExecutor = new JSCJavaScriptExecutor.Factory(new WritableNativeMap()).create(); // fresh new react context final ReactApplicationContext reactContext = new ReactApplicationContext(parentContext); @@ -59,8 +65,9 @@ public ReactApplicationContext build() throws Exception { } // load native modules - NativeModuleRegistry.Builder nativeRegistryBuilder = new NativeModuleRegistry.Builder(); - addNativeModules(reactContext, nativeRegistryBuilder); + final List mModuleSpecList = new ArrayList<>(); + //NativeModuleRegistry.Builder nativeRegistryBuilder = new NativeModuleRegistry.Builder(); + addNativeModules(reactContext,mModuleSpecList); //, nativeRegistryBuilder); // load js modules JavaScriptModuleRegistry.Builder jsModulesBuilder = new JavaScriptModuleRegistry.Builder(); @@ -69,7 +76,10 @@ public ReactApplicationContext build() throws Exception { CatalystInstanceImpl.Builder catalystInstanceBuilder = new CatalystInstanceImpl.Builder() .setReactQueueConfigurationSpec(ReactQueueConfigurationSpec.createDefault()) .setJSExecutor(jsExecutor) - .setRegistry(nativeRegistryBuilder.build()) + //.setRegistry(nativeRegistryBuilder.build()) + .setRegistry(new NativeModuleRegistry( + mModuleSpecList, + Collections.emptyMap())) .setJSModuleRegistry(jsModulesBuilder.build()) .setJSBundleLoader(jsBundleLoader) .setNativeModuleCallExceptionHandler(devSupportManager != null @@ -134,11 +144,13 @@ private void addJSModules(JavaScriptModuleRegistry.Builder jsModulesBuilder) { } } - private void addNativeModules(ReactApplicationContext reactContext, NativeModuleRegistry.Builder nativeRegistryBuilder) { + private void addNativeModules(ReactApplicationContext reactContext,List mModuleSpecList) { //, NativeModuleRegistry.Builder nativeRegistryBuilder) { for (int i = 0; i < reactPackages.size(); i++) { ReactPackage reactPackage = reactPackages.get(i); for (NativeModule nativeModule : reactPackage.createNativeModules(reactContext)) { - nativeRegistryBuilder.add(nativeModule); + //nativeRegistryBuilder.add(nativeModule); + ModuleSpec ms = new ModuleSpec(nativeModule.getClass(), new EagerModuleProvider(nativeModule)); + mModuleSpecList.add(ms); } } } diff --git a/android/src/main/java/co/apptailor/Worker/core/UIManagerStubModule.java b/android/src/main/java/co/apptailor/Worker/core/UIManagerStubModule.java index cb12d8d..b088e6b 100644 --- a/android/src/main/java/co/apptailor/Worker/core/UIManagerStubModule.java +++ b/android/src/main/java/co/apptailor/Worker/core/UIManagerStubModule.java @@ -1,5 +1,6 @@ package co.apptailor.Worker.core; +import com.facebook.react.bridge.ReactMethod; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContextBaseJavaModule; @@ -8,7 +9,7 @@ public class UIManagerStubModule extends ReactContextBaseJavaModule { public UIManagerStubModule(ReactApplicationContext reactContext) { super(reactContext); } - + @ReactMethod @Override public String getName() { return "UIManager"; diff --git a/ios/Workers/WorkerManager.h b/ios/Workers/WorkerManager.h index 51f5a76..9ab48a5 100644 --- a/ios/Workers/WorkerManager.h +++ b/ios/Workers/WorkerManager.h @@ -2,7 +2,7 @@ #ifndef WorkerManager_h #define WorkerManager_h -#import "RCTBridgeModule.h" +#import @interface WorkerManager : NSObject @end diff --git a/ios/Workers/WorkerManager.m b/ios/Workers/WorkerManager.m index e661044..a613dcb 100644 --- a/ios/Workers/WorkerManager.m +++ b/ios/Workers/WorkerManager.m @@ -1,10 +1,10 @@ #import "WorkerManager.h" #import "WorkerSelfManager.h" #include -#import "RCTBridge.h" -#import "RCTBridge+Private.h" -#import "RCTEventDispatcher.h" -#import "RCTBundleURLProvider.h" +#import +#import +#import +#import @implementation WorkerManager @@ -25,11 +25,10 @@ @implementation WorkerManager int workerId = abs(arc4random()); - NSURL *workerURL = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:name fallbackResource:nil]; - NSLog(@"starting Worker %@", [workerURL absoluteString]); - - - RCTBridge *workerBridge = [[RCTBridge alloc] initWithBundleURL:workerURL + //NSURL *workerURL = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:name fallbackResource:nil]; + NSURL *workerURL = [[NSBundle mainBundle] URLForResource:name withExtension:@"js"]; + //NSLog(@"starting Worker %@", [workerURL absoluteString]); + RCTBridge *workerBridge = [[RCTBridge alloc] initWithBundleURL:workerURL moduleProvider:nil launchOptions:nil]; diff --git a/ios/Workers/WorkerSelfManager.h b/ios/Workers/WorkerSelfManager.h index 7d6a8b5..692d1e2 100644 --- a/ios/Workers/WorkerSelfManager.h +++ b/ios/Workers/WorkerSelfManager.h @@ -2,7 +2,7 @@ #ifndef WorkerSelfManager_h #define WorkerSelfManager_h -#import "RCTBridgeModule.h" +#import @interface WorkerSelfManager : NSObject @property int workerId; diff --git a/ios/Workers/WorkerSelfManager.m b/ios/Workers/WorkerSelfManager.m index 8168dc4..e5c9fc9 100644 --- a/ios/Workers/WorkerSelfManager.m +++ b/ios/Workers/WorkerSelfManager.m @@ -1,8 +1,8 @@ #import "WorkerSelfManager.h" #include -#import "RCTBridge.h" -#import "RCTBridge+Private.h" -#import "RCTEventDispatcher.h" +#import +#import +#import @implementation WorkerSelfManager @@ -21,8 +21,7 @@ @implementation WorkerSelfManager NSString *eventName = [NSString stringWithFormat:@"Worker%i", self.workerId]; - [self.parentBridge.eventDispatcher sendAppEventWithName:eventName - body:message]; + [self.parentBridge.eventDispatcher sendAppEventWithName:eventName body:message]; } -@end \ No newline at end of file +@end