/* * 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. */ // // DoricDev.m // Doric // // Created by jingpeng.wang on 2020/2/25. // #import #import #import #import "DoricDev.h" #import "DoricWSClient.h" #import "DoricDebugDriver.h" @interface DoricDev () @property(nonatomic, strong) DoricWSClient *wsclient; @property(nonatomic, strong) DoricContext *context; @property(nonatomic, strong) DoricDebugDriver *driver; @end @implementation DoricDev - (instancetype)init { if (self = [super init]) { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onOpenEvent) name:@"OpenEvent" object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onEOFEvent) name:@"EOFEvent" object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onConnectExceptionEvent) name:@"ConnectExceptionEvent" object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onStartDebugEvent:) name:@"StartDebugEvent" object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onEnterDebugEvent) name:@"EnterDebugEvent" object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onStopDebugEvent) name:@"StopDebugEvent" object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onDebuggerReadyEvent) name:@"DebuggerReadyEvent" object:nil]; } return self; } + (instancetype)instance { static DoricDev *_instance; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _instance = [[DoricDev alloc] init]; }); return _instance; } - (void)connectDevKit:(NSString *)url { if (self.wsclient) { [self.wsclient close]; } self.wsclient = [[DoricWSClient alloc] initWithUrl:url]; } - (void)sendDevCommand:(NSString *)command { [self.wsclient send:command]; } - (void)disconnectDevKit { if (self.wsclient) { [self.wsclient close]; self.wsclient = nil; } } - (void)onOpenEvent { ShowToast(@"dev kit connected", BOTTOM); } - (void)onEOFEvent { ShowToast(@"dev kit eof exception", BOTTOM); } - (void)onConnectExceptionEvent { ShowToast(@"dev kit connection exception", BOTTOM); } - (void)onStartDebugEvent:(NSNotification *)notification { NSString *contextId = notification.object; ShowToast(contextId, BOTTOM); for (NSValue *value in [[DoricContextManager instance] aliveContexts]) { DoricContext *context = value.nonretainedObjectValue; BOOL result = [context.contextId compare:contextId] == NSOrderedSame; if (result) { _context = context; } } } - (void)onEnterDebugEvent { _driver = [DoricDebugDriver new]; } - (void)onStopDebugEvent { _context.driver = [DoricNativeDriver instance]; [_context reInit]; } - (void)onDebuggerReadyEvent { _context.driver = _driver; [_context reInit]; } @end