clean up ctx initiliazation/remove code duplication
This commit is contained in:
parent
7074d66c5f
commit
832e0c5e13
|
@ -31,7 +31,22 @@
|
||||||
|
|
||||||
JSGlobalContextRef RealmReactGetJSGlobalContextForExecutor(id executor) {
|
JSGlobalContextRef RealmReactGetJSGlobalContextForExecutor(id executor) {
|
||||||
Ivar contextIvar = class_getInstanceVariable([executor class], "_context");
|
Ivar contextIvar = class_getInstanceVariable([executor class], "_context");
|
||||||
|
if (!contextIvar) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
id rctJSContext = contextIvar ? object_getIvar(executor, contextIvar) : nil;
|
id rctJSContext = contextIvar ? object_getIvar(executor, contextIvar) : nil;
|
||||||
|
if (!rctJSContext) {
|
||||||
|
Class RCTJavaScriptContext = NSClassFromString(@"RCTJavaScriptContext");
|
||||||
|
if (RCTJavaScriptContext) {
|
||||||
|
JSGlobalContextRef ctx = JSGlobalContextCreate(NULL);
|
||||||
|
rctJSContext = [[RCTJavaScriptContext alloc] initWithJSContext:ctx];
|
||||||
|
object_setIvar(executor, contextIvar, rctJSContext);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
NSLog(@"Failed to load RCTJavaScriptContext class");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return [rctJSContext ctx];
|
return [rctJSContext ctx];
|
||||||
}
|
}
|
||||||
|
@ -61,10 +76,6 @@ JSGlobalContextRef RealmReactGetJSGlobalContextForExecutor(id executor) {
|
||||||
- (void)setBridge:(RCTBridge *)bridge {
|
- (void)setBridge:(RCTBridge *)bridge {
|
||||||
_bridge = bridge;
|
_bridge = bridge;
|
||||||
|
|
||||||
Ivar executorIvar = class_getInstanceVariable([bridge class], "_javaScriptExecutor");
|
|
||||||
id executor = object_getIvar(bridge, executorIvar);
|
|
||||||
Ivar contextIvar = class_getInstanceVariable([executor class], "_context");
|
|
||||||
|
|
||||||
static GCDWebServer *s_webServer;
|
static GCDWebServer *s_webServer;
|
||||||
if (s_webServer) {
|
if (s_webServer) {
|
||||||
[s_webServer stop];
|
[s_webServer stop];
|
||||||
|
@ -73,7 +84,9 @@ JSGlobalContextRef RealmReactGetJSGlobalContextForExecutor(id executor) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// The executor could be a RCTWebSocketExecutor, in which case it won't have a JS context.
|
// The executor could be a RCTWebSocketExecutor, in which case it won't have a JS context.
|
||||||
if (!contextIvar) {
|
Ivar executorIvar = class_getInstanceVariable([bridge class], "_javaScriptExecutor");
|
||||||
|
id executor = object_getIvar(bridge, executorIvar);
|
||||||
|
if ([executor isMemberOfClass:NSClassFromString(@"RCTWebSocketExecutor")]) {
|
||||||
[GCDWebServer setLogLevel:3];
|
[GCDWebServer setLogLevel:3];
|
||||||
GCDWebServer *webServer = [[GCDWebServer alloc] init];
|
GCDWebServer *webServer = [[GCDWebServer alloc] init];
|
||||||
RJSRPCServer *rpcServer = [[RJSRPCServer alloc] init];
|
RJSRPCServer *rpcServer = [[RJSRPCServer alloc] init];
|
||||||
|
@ -106,24 +119,7 @@ JSGlobalContextRef RealmReactGetJSGlobalContextForExecutor(id executor) {
|
||||||
}
|
}
|
||||||
|
|
||||||
[executor executeBlockOnJavaScriptQueue:^{
|
[executor executeBlockOnJavaScriptQueue:^{
|
||||||
id rctJSContext = object_getIvar(executor, contextIvar);
|
JSGlobalContextRef ctx = RealmReactGetJSGlobalContextForExecutor(executor);
|
||||||
JSGlobalContextRef ctx;
|
|
||||||
|
|
||||||
if (rctJSContext) {
|
|
||||||
ctx = [rctJSContext ctx];
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
Class RCTJavaScriptContext = NSClassFromString(@"RCTJavaScriptContext");
|
|
||||||
|
|
||||||
if (RCTJavaScriptContext) {
|
|
||||||
ctx = JSGlobalContextCreate(NULL);
|
|
||||||
object_setIvar(executor, contextIvar, [[RCTJavaScriptContext alloc] initWithJSContext:ctx]);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
NSLog(@"Failed to load RCTJavaScriptContext class");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[RealmJS initializeContext:ctx];
|
[RealmJS initializeContext:ctx];
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue