diff --git a/Pod/Classes/Engine/DoricJSRemoteExecutor.m b/Pod/Classes/Engine/DoricJSRemoteExecutor.m index 4875126f..917f0e3a 100644 --- a/Pod/Classes/Engine/DoricJSRemoteExecutor.m +++ b/Pod/Classes/Engine/DoricJSRemoteExecutor.m @@ -50,6 +50,7 @@ - (instancetype)init { return self; } +#pragma mark - SRWebSocketDelegate - (void)webSocketDidOpen:(SRWebSocket *)webSocket { DoricLog(@"debugger webSocketDidOpen"); DC_UNLOCK(self.semaphore); @@ -93,6 +94,8 @@ - (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message { result = ((Block4)tmpBlk)(argsArr[0], argsArr[1], argsArr[2], argsArr[3]); } else if (argsArr.count == 5) { result = ((Block5)tmpBlk)(argsArr[0], argsArr[1], argsArr[2], argsArr[3], argsArr[4]); + }else { + DoricLog(@"error:args to more than 5. args:%@",argsArr); } } else if ([cmd isEqualToString:@"invokeMethod"]) { @@ -115,6 +118,7 @@ - (void)webSocket:(SRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reas DoricLog(@"debugger webSocketdidCloseWithCode"); } +#pragma mark - DoricJSExecutorProtocol - (NSString *)loadJSScript:(NSString *)script source:(NSString *)source { return nil; @@ -141,10 +145,7 @@ - (JSValue *)invokeObject:(NSString *)objName method:(NSString *)funcName args:( NSMutableArray *argsMArr = [NSMutableArray new]; for (id arg in args) { - NSDictionary *dic = @{ - @"type": @(DoricargTypeWithArg(arg)), - @"value": arg - }; + NSDictionary *dic = [self dicForArg:arg]; [argsMArr addObject:dic]; } @@ -168,6 +169,19 @@ - (JSValue *)invokeObject:(NSString *)objName method:(NSString *)funcName args:( return self.temp; } +- (NSDictionary *)dicForArg:(id)arg { + DoricJSRemoteArgType type = DoricargTypeWithArg(arg); + if (type == DoricJSRemoteArgTypeObject || type == DoricJSRemoteArgTypeArray) { + NSString *jsonStr = [NSString dc_convertToJsonWithDic:(NSDictionary *)arg]; + arg = jsonStr; + } + NSDictionary *dic = @{ + @"type": @(type), + @"value": arg + }; + return dic; +} + - (void)close { [self.srWebSocket close]; } diff --git a/Pod/Classes/Util/DoricJSRemoteArgType.h b/Pod/Classes/Util/DoricJSRemoteArgType.h index f18ea41d..c156a740 100644 --- a/Pod/Classes/Util/DoricJSRemoteArgType.h +++ b/Pod/Classes/Util/DoricJSRemoteArgType.h @@ -11,7 +11,7 @@ NS_ASSUME_NONNULL_BEGIN typedef NS_ENUM(NSUInteger, DoricJSRemoteArgType) { DoricJSRemoteArgTypeNil = 0, - DoricJSRemoteArgTypeInteger, + DoricJSRemoteArgTypeNumber, DoricJSRemoteArgTypeBool, DoricJSRemoteArgTypeString, DoricJSRemoteArgTypeObject, @@ -20,4 +20,5 @@ typedef NS_ENUM(NSUInteger, DoricJSRemoteArgType) { DoricJSRemoteArgType DoricargTypeWithArg(id arg); + NS_ASSUME_NONNULL_END diff --git a/Pod/Classes/Util/DoricJSRemoteArgType.m b/Pod/Classes/Util/DoricJSRemoteArgType.m index 1b018109..a056199a 100644 --- a/Pod/Classes/Util/DoricJSRemoteArgType.m +++ b/Pod/Classes/Util/DoricJSRemoteArgType.m @@ -6,7 +6,16 @@ // #import "DoricJSRemoteArgType.h" -DoricJSRemoteArgType DoricargTypeWithArg(id arg) { - // TODO: 类型缺失 - return DoricJSRemoteArgTypeString; +DoricJSRemoteArgType DoricargTypeWithArg(id arg) { + DoricJSRemoteArgType type = DoricJSRemoteArgTypeNil; + if ([arg isKindOfClass:[NSNumber class]]) { + type = DoricJSRemoteArgTypeNumber; + }else if ([arg isKindOfClass:[NSString class]]) { + type = DoricJSRemoteArgTypeString; + }else if ([arg isKindOfClass:[NSDictionary class]]) { + type = DoricJSRemoteArgTypeObject; + }else if ([arg isKindOfClass:[NSMutableArray class]]) { + type = DoricJSRemoteArgTypeArray; + } + return type; }