add doric remote js executor on ios
This commit is contained in:
		| @@ -23,6 +23,7 @@ | |||||||
| #import "DoricJSEngine.h" | #import "DoricJSEngine.h" | ||||||
| #import "DoricJSExecutorProtocal.h" | #import "DoricJSExecutorProtocal.h" | ||||||
| #import "DoricJSCoreExecutor.h" | #import "DoricJSCoreExecutor.h" | ||||||
|  | #import "DoricJSRemoteExecutor.h" | ||||||
| #import "DoricConstant.h" | #import "DoricConstant.h" | ||||||
| #import "DoricUtil.h" | #import "DoricUtil.h" | ||||||
| #import "DoricBridgeExtension.h" | #import "DoricBridgeExtension.h" | ||||||
| @@ -41,7 +42,7 @@ - (instancetype)init { | |||||||
|         _bridgeExtension = [[DoricBridgeExtension alloc] init]; |         _bridgeExtension = [[DoricBridgeExtension alloc] init]; | ||||||
|         dispatch_async(_jsQueue, ^() { |         dispatch_async(_jsQueue, ^() { | ||||||
|             self.timers = [[NSMutableDictionary alloc] init]; |             self.timers = [[NSMutableDictionary alloc] init]; | ||||||
|             self.jsExecutor = [[DoricJSCoreExecutor alloc] init]; |             self.jsExecutor = [[DoricJSRemoteExecutor alloc] init]; | ||||||
|             self.registry = [[DoricRegistry alloc] init]; |             self.registry = [[DoricRegistry alloc] init]; | ||||||
|             [self initJSExecutor]; |             [self initJSExecutor]; | ||||||
|             [self initDoricEnvironment]; |             [self initDoricEnvironment]; | ||||||
|   | |||||||
							
								
								
									
										32
									
								
								iOS/Pod/Classes/Engine/DoricJSRemoteExecutor.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								iOS/Pod/Classes/Engine/DoricJSRemoteExecutor.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | |||||||
|  | /* | ||||||
|  | * Copyright [2019] [Doric.Pub] | ||||||
|  | * | ||||||
|  | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  | * you may not use this file except in compliance with the License. | ||||||
|  | * You may obtain a copy of the License at | ||||||
|  | * | ||||||
|  | * http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  | * | ||||||
|  | * Unless required by applicable law or agreed to in writing, software | ||||||
|  | * distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  | * See the License for the specific language governing permissions and | ||||||
|  | * limitations under the License. | ||||||
|  | */ | ||||||
|  | // | ||||||
|  | //  DoricJSRemoteExecutor.h | ||||||
|  | //  Pods | ||||||
|  | // | ||||||
|  | //  Created by 王劲鹏 on 2019/10/31. | ||||||
|  | // | ||||||
|  |  | ||||||
|  | #import <Foundation/Foundation.h> | ||||||
|  | #import "DoricJSExecutorProtocal.h" | ||||||
|  |  | ||||||
|  | NS_ASSUME_NONNULL_BEGIN | ||||||
|  |  | ||||||
|  | @interface DoricJSRemoteExecutor : NSObject <DoricJSExecutorProtocal> | ||||||
|  |  | ||||||
|  | @end | ||||||
|  |  | ||||||
|  | NS_ASSUME_NONNULL_END | ||||||
							
								
								
									
										63
									
								
								iOS/Pod/Classes/Engine/DoricJSRemoteExecutor.m
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								iOS/Pod/Classes/Engine/DoricJSRemoteExecutor.m
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,63 @@ | |||||||
|  | /* | ||||||
|  | * Copyright [2019] [Doric.Pub] | ||||||
|  | * | ||||||
|  | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  | * you may not use this file except in compliance with the License. | ||||||
|  | * You may obtain a copy of the License at | ||||||
|  | * | ||||||
|  | * http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  | * | ||||||
|  | * Unless required by applicable law or agreed to in writing, software | ||||||
|  | * distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  | * See the License for the specific language governing permissions and | ||||||
|  | * limitations under the License. | ||||||
|  | */ | ||||||
|  | // | ||||||
|  | //  DoricJSRemoteExecutor.m | ||||||
|  | //  Doric | ||||||
|  | // | ||||||
|  | //  Created by 王劲鹏 on 2019/10/31. | ||||||
|  | // | ||||||
|  | #import "DoricJSRemoteExecutor.h" | ||||||
|  | 
 | ||||||
|  | @interface DoricJSRemoteExecutor () | ||||||
|  | 
 | ||||||
|  | @property(nonatomic, strong) JSContext *jsContext; | ||||||
|  | 
 | ||||||
|  | @end | ||||||
|  | 
 | ||||||
|  | @implementation DoricJSRemoteExecutor | ||||||
|  | - (instancetype)init { | ||||||
|  |     if (self = [super init]) { | ||||||
|  |         _jsContext = [[JSContext alloc] init]; | ||||||
|  |     } | ||||||
|  |     return self; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | - (void)checkJSException { | ||||||
|  |     if (self.jsContext.exception) { | ||||||
|  |         NSString *errMsg = [NSString stringWithFormat:@"%@ (line %@ in the generated bundle)\n/***StackTrace***/\n%@/***StackTrace***/", self.jsContext.exception, self.jsContext.exception[@"line"], self.jsContext.exception[@"stack"]]; | ||||||
|  |         @throw [[NSException alloc] initWithName:@"DoricJS" reason:errMsg userInfo:nil]; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | - (NSString *)loadJSScript:(NSString *)script source:(NSString *)source { | ||||||
|  |     NSString *ret = [[self.jsContext evaluateScript:script withSourceURL:[NSURL URLWithString:source]] toString]; | ||||||
|  |     [self checkJSException]; | ||||||
|  |     return ret; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | - (void)injectGlobalJSObject:(NSString *)name obj:(id)obj { | ||||||
|  |     self.jsContext[name] = obj; | ||||||
|  |     [self checkJSException]; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | - (JSValue *)invokeObject:(NSString *)objName method:(NSString *)funcName args:(NSArray *)args { | ||||||
|  |     JSValue *obj = [self.jsContext objectForKeyedSubscript:objName]; | ||||||
|  |     JSValue *ret = [obj invokeMethod:funcName withArguments:args]; | ||||||
|  |     [self checkJSException]; | ||||||
|  |     return ret; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | @end | ||||||
		Reference in New Issue
	
	Block a user