iOS Websocket

This commit is contained in:
pengfei.zhou 2019-08-14 10:08:33 +08:00
parent ba2a90a6c1
commit 0fa9c86ef8
9 changed files with 116 additions and 3 deletions

View File

@ -41,4 +41,5 @@ TODO: Add long description of the pod here.
# s.frameworks = 'UIKit', 'MapKit' # s.frameworks = 'UIKit', 'MapKit'
# s.dependency 'AFNetworking', '~> 2.3' # s.dependency 'AFNetworking', '~> 2.3'
s.dependency 'SDWebImage', '~> 5.0' s.dependency 'SDWebImage', '~> 5.0'
s.dependency 'SocketRocket', '~> 0.5.1'
end end

View File

@ -24,9 +24,10 @@ - (void)viewDidLoad {
NSString *path = [[NSBundle bundleForClass:[self class]] pathForResource:@"Snake" ofType:@"js"]; NSString *path = [[NSBundle bundleForClass:[self class]] pathForResource:@"Snake" ofType:@"js"];
NSString *jsContent = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil]; NSString *jsContent = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
self.doricContext = [[DoricContext alloc] initWithScript:jsContent source:@"Snake"]; self.doricContext = [[DoricContext alloc] initWithScript:jsContent source:@"test.js"];
self.doricContext.rootNode.view = self.view; self.doricContext.rootNode.view = self.view;
[self.doricContext initContextWithWidth:self.view.width height:self.view.height]; [self.doricContext initContextWithWidth:self.view.width height:self.view.height];
[self.doricContext.driver connectDevKit:@"ws://192.168.11.38:7777"];
} }

View File

@ -1,9 +1,11 @@
PODS: PODS:
- Doric (0.1.0): - Doric (0.1.0):
- SDWebImage (~> 5.0) - SDWebImage (~> 5.0)
- SocketRocket (~> 0.5.1)
- SDWebImage (5.0.6): - SDWebImage (5.0.6):
- SDWebImage/Core (= 5.0.6) - SDWebImage/Core (= 5.0.6)
- SDWebImage/Core (5.0.6) - SDWebImage/Core (5.0.6)
- SocketRocket (0.5.1)
DEPENDENCIES: DEPENDENCIES:
- Doric (from `../`) - Doric (from `../`)
@ -11,14 +13,16 @@ DEPENDENCIES:
SPEC REPOS: SPEC REPOS:
https://github.com/cocoapods/specs.git: https://github.com/cocoapods/specs.git:
- SDWebImage - SDWebImage
- SocketRocket
EXTERNAL SOURCES: EXTERNAL SOURCES:
Doric: Doric:
:path: "../" :path: "../"
SPEC CHECKSUMS: SPEC CHECKSUMS:
Doric: 3b2bd0260ddecb3a7ec6ed95a88ace58c2a75685 Doric: 79268ea6e03e7dee56b072e532d9a29f50ccd72d
SDWebImage: 920f1a2ff1ca8296ad34f6e0510a1ef1d70ac965 SDWebImage: 920f1a2ff1ca8296ad34f6e0510a1ef1d70ac965
SocketRocket: d57c7159b83c3c6655745cd15302aa24b6bae531
PODFILE CHECKSUM: 012563d71439e7e33e976dca3b59664ed56cee39 PODFILE CHECKSUM: 012563d71439e7e33e976dca3b59664ed56cee39

View File

@ -0,0 +1,18 @@
//
// WSClient.h
// Doric
//
// Created by pengfei.zhou on 2019/8/14.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface DoricWSClient : NSObject
- (instancetype)initWithUrl:(NSString *)url;
- (void)close;
@end
NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,65 @@
//
// WSClient.m
// Doric
//
// Created by pengfei.zhou on 2019/8/14.
//
#import "DoricWSClient.h"
#import <SocketRocket/SRWebSocket.h>
#import "DoricUtil.h"
#import "DoricContextManager.h"
@interface DoricWSClient()<SRWebSocketDelegate>
@property (nonatomic,strong) SRWebSocket *websocket;
@end
@implementation DoricWSClient
- (instancetype)initWithUrl:(NSString *)url {
if(self = [super init]) {
_websocket = [[SRWebSocket alloc] initWithURL:[NSURL URLWithString:url]];
_websocket.delegate = self;
[_websocket open];
}
return self;
}
- (void)webSocketDidOpen:(SRWebSocket *)webSocket {
DoricLog(@"webSocketDidOpen");
}
- (void)webSocket:(SRWebSocket *)webSocket didReceivePong:(NSData *)pongPayload {
DoricLog(@"webSocketdidReceivePong");
}
- (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message {
NSData *jsonData = [message dataUsingEncoding:NSUTF8StringEncoding];
NSError *err;
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData
options:NSJSONReadingMutableContainers
error:&err];
if(err) {
DoricLog(@"webSocketdidReceiveMessage parse error%@",err);
return;
}
NSString *source = [[dic valueForKey:@"source"] mutableCopy];
NSString *script = [dic valueForKey:@"script"];
for(NSValue *value in [[DoricContextManager instance] aliveContexts]) {
DoricContext *context = value.nonretainedObjectValue;
if([source containsString:context.source]) {
[context reload:script];
}
}
}
- (void)webSocket:(SRWebSocket *)webSocket didFailWithError:(NSError *)error {
DoricLog(@"webSocketdidFailWithError");
}
- (void)webSocket:(SRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reason:(NSString *)reason wasClean:(BOOL)wasClean {
DoricLog(@"webSocketdidCloseWithCode");
}
- (void)close {
[self.websocket close];
}
@end

View File

@ -18,6 +18,8 @@ NS_ASSUME_NONNULL_BEGIN
- (void)destroyContext:(DoricContext *)context; - (void)destroyContext:(DoricContext *)context;
- (DoricContext *)getContext:(NSString *)contextId; - (DoricContext *)getContext:(NSString *)contextId;
- (NSArray *)aliveContexts;
@end @end
NS_ASSUME_NONNULL_END NS_ASSUME_NONNULL_END

View File

@ -62,4 +62,8 @@ - (void)destroyContext:(DoricContext *)context {
}; };
} }
- (NSArray *)aliveContexts {
return [self.doricContextMap allValues];
}
@end @end

View File

@ -29,6 +29,9 @@ NS_ASSUME_NONNULL_BEGIN
- (DoricAsyncResult *)invokeContextEntity:(NSString *)contextId method:(NSString *)method, ...; - (DoricAsyncResult *)invokeContextEntity:(NSString *)contextId method:(NSString *)method, ...;
- (DoricAsyncResult *)invokeContextEntity:(NSString *)contextId method:(NSString *)method arguments:(va_list) args; - (DoricAsyncResult *)invokeContextEntity:(NSString *)contextId method:(NSString *)method arguments:(va_list) args;
- (DoricAsyncResult *)invokeContextEntity:(NSString *)contextId method:(NSString *)method argumentsArray:(NSArray *)args; - (DoricAsyncResult *)invokeContextEntity:(NSString *)contextId method:(NSString *)method argumentsArray:(NSArray *)args;
- (void)connectDevKit:(NSString *)url;
- (void)disconnectDevKit;
@end @end
NS_ASSUME_NONNULL_END NS_ASSUME_NONNULL_END

View File

@ -8,9 +8,11 @@
#import "DoricDriver.h" #import "DoricDriver.h"
#import "DoricJSEngine.h" #import "DoricJSEngine.h"
#import "DoricConstant.h" #import "DoricConstant.h"
#import "DoricWSClient.h"
@interface DoricDriver() @interface DoricDriver()
@property (nonatomic, strong) DoricJSEngine *jsExecutor; @property (nonatomic, strong) DoricJSEngine *jsExecutor;
@property (nonatomic, strong) DoricWSClient *wsclient;
@end @end
@implementation DoricDriver @implementation DoricDriver
@ -151,5 +153,18 @@ - (DoricAsyncResult *)destroyContext:(NSString *)contextId {
return ret; return ret;
} }
- (void)connectDevKit:(NSString *)url {
if(self.wsclient) {
[self.wsclient close];
}
self.wsclient = [[DoricWSClient alloc] initWithUrl:url];
}
- (void)disconnectDevKit {
if(self.wsclient) {
[self.wsclient close];
self.wsclient = nil;
}
}
@end @end