connectDeviceManager.m 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621
  1. //
  2. // connectDeviceManager.m
  3. // 隐私保护
  4. //
  5. // Created by xd h on 2023/10/9.
  6. //
  7. //第三方 瑞云 的链接服务
  8. #import "connectDeviceManager.h"
  9. #import <CocoaAsyncSocket/GCDAsyncSocket.h>
  10. #import "WHPingTester.h"
  11. #import "RSATool.h"
  12. #import "errorAlertTool.h"
  13. @interface connectDeviceManager ()<
  14. GCDAsyncSocketDelegate,
  15. //RaylinkProxyDelegate,
  16. WHPingDelegate
  17. >
  18. {
  19. dispatch_queue_t initProxyQueue;
  20. WHPingTester *whPingTester;
  21. BOOL didRuiYunInitOkType;
  22. BOOL disconnected_cb_type;//瑞云回调链接断开了
  23. BOOL didPingType;//是否ping过
  24. BOOL didRuiyunLinkType;//是否瑞云链接通过
  25. NSInteger RuiyunLinkSecond;//瑞云链接描述
  26. }
  27. @property (nonatomic, strong) NSTimer *connectCheckTimer;//这个应该是检查初始化是否完成的
  28. //@property (nonatomic, strong) GCDAsyncSocket *socket;
  29. //
  30. //@property (nonatomic, strong) GCDAsyncSocket *serverSocket;
  31. @property (nonatomic, assign) BOOL sdnConnected;
  32. @property (nonatomic, assign) BOOL peerConnected;
  33. @property (nonatomic, assign) NSInteger tcpPort;
  34. @property (nonatomic, copy) NSString *Pre_sdnId;//上一个sdn好
  35. @property (nonatomic, assign) BOOL isGetThridMsgType;
  36. @end
  37. @implementation connectDeviceManager
  38. static connectDeviceManager *connectDeviceManagerInstance = nil;
  39. +(connectDeviceManager *)shareInstance;
  40. {
  41. static dispatch_once_t onceToken;
  42. dispatch_once(&onceToken, ^{
  43. connectDeviceManagerInstance = [[connectDeviceManager alloc] init];
  44. connectDeviceManagerInstance.curConnectDeviceState = DeviceConnectUnknown;
  45. });
  46. return connectDeviceManagerInstance;
  47. }
  48. #pragma mark 根据扫码的sn获取第三方信息
  49. -(void)getThridMsgBySN:(NSString*)snStr needReconnect:(BOOL)needReconnect didNetEnd:(netWork_DidEndByOK)didNetEndIsOK
  50. {
  51. if(_isGetThridMsgType){
  52. didNetEndIsOK(-1);
  53. return;
  54. }
  55. if(needReconnect){
  56. _curConnectDeviceState = DeviceConnectGetThridMsging;
  57. //更换设备
  58. // NSString *curSdnId = self.DeviceThirdIdMod.data.sdnId;
  59. // if(curSdnId){
  60. // _Pre_sdnId = curSdnId;
  61. // }
  62. }
  63. NSMutableDictionary *paraDict = [NSMutableDictionary new];
  64. [paraDict setValue:snStr forKey:@"sn"];
  65. _isGetThridMsgType = YES;
  66. KWeakSelf
  67. [[netWorkManager shareInstance] CommonGetWithCallBackCode:getThirdIdBySn Parameters:paraDict success:^(id _Nonnull responseObject) {
  68. if(!needReconnect){
  69. NSError *parseError;
  70. NSData *jsonData = [NSJSONSerialization dataWithJSONObject:responseObject options:NSJSONWritingPrettyPrinted error:&parseError];
  71. if (parseError) {
  72. //解析出错
  73. }
  74. NSString * str = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
  75. [cachesFileManager writeLogsWithMsg:str];
  76. }
  77. self->_isGetThridMsgType = NO;
  78. DeviceThirdIdModel *model = [[DeviceThirdIdModel alloc] initWithDictionary:responseObject error:nil];
  79. if(model.status == 0
  80. && model.data)
  81. {
  82. weakSelf.DeviceThirdIdMod = model;
  83. NSString*desPwdstr = [RSATool AES128Decrypt:weakSelf.DeviceThirdIdMod.data.password key:AESCODEKEEYY];
  84. didNetEndIsOK(YES);
  85. /*密码保持在本地*/
  86. NSDictionary *deviceDict = [HWDataManager getObjectWithKey:Const_Have_Add_Device];
  87. NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithDictionary:deviceDict];
  88. [dict setObject:desPwdstr forKey:Const_Have_Add_Device_PWD];
  89. NSString *sdnid = model.data.sdnId;
  90. if(sdnid){
  91. [dict setObject:sdnid forKey:Const_Have_Add_Device_sdnid];
  92. }
  93. [HWDataManager setObjectWithKey:Const_Have_Add_Device_Privacy_Mode value:[NSNumber numberWithBool:model.data.isPrivacyMode]];
  94. [HWDataManager setObjectWithKey:Const_Have_Add_Device value:dict];
  95. //
  96. bool connected = 1;// [RaylinkProxy.sharedManager isSdnConnected];
  97. if(!connected || needReconnect){
  98. self->didPingType = NO;
  99. self->didRuiyunLinkType = NO;
  100. self->_isPingOk = NO;
  101. self->_tcpPortStr = nil;
  102. self->_tcpPort = 0;
  103. weakSelf.curConnectDeviceState = DeviceConnectGetThridOK;
  104. NSString *ipStr = weakSelf.DeviceThirdIdMod.data.ip;
  105. [weakSelf startPingDeviceIp:ipStr];
  106. [weakSelf initRuiyunSDKFun];
  107. }
  108. }
  109. else{
  110. if(model.status == 201||model.status == 202){
  111. didNetEndIsOK(model.status);
  112. }
  113. else{
  114. didNetEndIsOK(2);
  115. }
  116. }
  117. } failure:^(NSError * _Nonnull error) {
  118. HLog("网络报错");
  119. self->_isGetThridMsgType = NO;
  120. didNetEndIsOK(NO);
  121. }];
  122. }
  123. #pragma mark 刷新扫码的sn获取第三方信息 是否需要重连
  124. -(void)RefreshThridMsg
  125. {
  126. /*先判断本地有无设备 无设备时需要先扫码添加设备*/
  127. NSDictionary *deviceDict = [HWDataManager getObjectWithKey:Const_Have_Add_Device];
  128. if (deviceDict && [[deviceDict allKeys] containsObject:Const_Have_Add_Device_SN]){
  129. //有设备了先去做链接准备 // 80bec9c5
  130. NSString *SNStr = deviceDict[@"Const_Have_Add_Device_SN"];
  131. if(SNStr){
  132. [[connectDeviceManager shareInstance] getThridMsgBySN:SNStr needReconnect:NO didNetEnd:^(NSInteger didSuc) {
  133. }];
  134. }
  135. }
  136. }
  137. #pragma mark 初始化瑞云的SDK等
  138. - (void)initRuiyunSDKFun{
  139. if(didRuiYunInitOkType){
  140. [self onConnectFun];
  141. return;
  142. }
  143. HLog(@"initRuiyunSDKFun");
  144. self.sdnConnected = NO;
  145. self.peerConnected = NO;
  146. //self.sendBtn.enabled = NO;
  147. //self.sdnConnectStateLab.text = @"SDN state: Connectting";
  148. //self.sdnIDLab.text = @"My SDN ID:";
  149. //RaylinkProxy.sharedManager.delegate = self;
  150. initProxyQueue = dispatch_queue_create("init_proxy", 0);
  151. NSURL *logUrl = [[NSFileManager.defaultManager URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask].firstObject URLByAppendingPathComponent:@"logs"];
  152. if (![NSFileManager.defaultManager fileExistsAtPath:logUrl.path]) {
  153. [NSFileManager.defaultManager createDirectoryAtURL:logUrl withIntermediateDirectories:YES attributes:NULL error:NULL];
  154. }
  155. KWeakSelf
  156. dispatch_async(initProxyQueue, ^{
  157. NSData *sdnInfo = [NSData dataWithContentsOfURL:[[NSBundle.mainBundle bundleURL] URLByAppendingPathComponent:@"planet.1ali_3ry_peer"]];
  158. /// 1. 初始化代理库
  159. //[RaylinkProxy.sharedManager initProxy:logUrl.path rootSdnInfo:sdnInfo];
  160. self->didRuiYunInitOkType = YES;
  161. /// 启动定时器监听 SND 连接状态
  162. self.connectCheckTimer = [NSTimer scheduledTimerWithTimeInterval:0.5 repeats:YES block:^(NSTimer * _Nonnull timer) {
  163. /// 2. 监听SDN 连接状态
  164. bool connected = 1;// [RaylinkProxy.sharedManager isSdnConnected];
  165. if (self.sdnConnected == connected) {
  166. return;
  167. }
  168. self.sdnConnected = connected;
  169. if (self.sdnConnected) {
  170. [weakSelf onConnectFun];
  171. [self->_connectCheckTimer invalidate];
  172. //self.sdnConnectStateLab.text = @"SDN state: Connected";
  173. //self.sdnIDLab.text = [@"My SDN ID: " stringByAppendingString:[RaylinkProxy.sharedManager getSdnId]];
  174. } else {
  175. //self.sdnConnectStateLab.text = @"SDN state: Connectting";
  176. }
  177. }];
  178. [[NSRunLoop currentRunLoop] addTimer:self.connectCheckTimer forMode:NSRunLoopCommonModes];
  179. [[NSRunLoop currentRunLoop] run];
  180. });
  181. /// 作为服务端时,启动端口监听
  182. // self.serverSocket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
  183. //
  184. // if ([self.serverSocket acceptOnPort:0 error:NULL]) {
  185. // //self.serverPortLab.text = [NSString stringWithFormat: @"server port: %d", self.serverSocket.localPort];
  186. // NSLog(@"accept ok %d",self.serverSocket.localPort);
  187. // }
  188. }
  189. - (void)onConnectFun{
  190. if (self.peerConnected == YES
  191. && _Pre_sdnId
  192. && ![_Pre_sdnId isEqualToString:self.DeviceThirdIdMod.data.sdnId]) {
  193. //[self disconnect];
  194. //return;
  195. }
  196. RuiyunLinkSecond = 0;
  197. _curConnectDeviceState = DeviceConnectDeciceing;
  198. NSString *curSdnId = self.DeviceThirdIdMod.data.sdnId; //@"3dfe7c1f";
  199. if(!curSdnId){
  200. NSDictionary *deviceDict = [HWDataManager getObjectWithKey:Const_Have_Add_Device];
  201. if(deviceDict && [[deviceDict allKeys] containsObject:Const_Have_Add_Device_sdnid])
  202. {
  203. curSdnId = deviceDict[Const_Have_Add_Device_sdnid];
  204. }
  205. }
  206. /// 3. 根据对端的 SDN ID 创建连接
  207. //[RaylinkProxy.sharedManager createNewConnection:curSdnId];
  208. //self.socket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
  209. //[self.connectBtn setEnabled:NO];
  210. //[self.connectBtn setTitle:@"连接中..." forState:UIControlStateDisabled];
  211. //KWeakSelf
  212. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(30 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  213. if(!self->didRuiyunLinkType){
  214. //弹框瑞云链接失败
  215. [[errorAlertTool shareInstance] showNetErrorAlertFun:11 didClickBut:^(NSInteger tag) {
  216. }];
  217. }
  218. });
  219. }
  220. - (void)disconnect {
  221. NSString *curSdnId = self.DeviceThirdIdMod.data.sdnId;
  222. if(_Pre_sdnId){
  223. curSdnId = _Pre_sdnId;
  224. }
  225. if(curSdnId){
  226. // [RaylinkProxy.sharedManager closeConnection:curSdnId];
  227. // [RaylinkProxy.sharedManager closeHttpService:curSdnId];
  228. //[self.connectBtn setTitle:@"连接" forState:UIControlStateNormal];
  229. self.peerConnected = NO;
  230. }
  231. }
  232. - (IBAction)onClickSend:(id)sender {
  233. // if (self.messageTF.text.length <= 0) {
  234. // return;
  235. // }
  236. //[self.socket writeData:[@"111" dataUsingEncoding:NSUTF8StringEncoding] withTimeout:-1 tag:0];
  237. }
  238. //- (void)socket:(GCDAsyncSocket *)sock didAcceptNewSocket:(GCDAsyncSocket *)newSocket {
  239. //
  240. // NSLog(@"didAcceptNewSocket");
  241. //
  242. //
  243. // [newSocket setDelegate:self delegateQueue:dispatch_get_main_queue()];
  244. //
  245. // NSThread *revcThread = [[NSThread alloc] initWithBlock:^{
  246. //
  247. // while (true) {
  248. // [newSocket readDataWithTimeout:-1 tag:0];
  249. // [NSThread sleepForTimeInterval:0.1];
  250. // }
  251. // }];
  252. //
  253. // [revcThread start];
  254. //
  255. //}
  256. - (void)on111ProxyConnected:(NSString *)sdnId status:(int)status
  257. {
  258. }
  259. - (void)On22ProxyDisconnected_cb:(NSString *)sdnId {
  260. }
  261. //瑞云sock 断开了 需要重连
  262. - (void)tryReconnectFun{
  263. [cachesFileManager writeLogsWithMsg:@"tryReconnect"];
  264. [cachesFileManager writeLogsWithMsg:@"click again try Net Work"];
  265. [self getThridMsgBySN:self.DeviceThirdIdMod.data.changeSn needReconnect:NO didNetEnd:^(NSInteger didSuc) {
  266. NSString *tip = [[NSString alloc] initWithFormat:@"Net Work state:%ld",didSuc];
  267. [cachesFileManager writeLogsWithMsg:tip];
  268. }];
  269. if(!disconnected_cb_type){
  270. [cachesFileManager writeLogsWithMsg:@"tryReconnect return"];
  271. return;
  272. }
  273. NSURL *logUrl = [[NSFileManager.defaultManager URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask].firstObject URLByAppendingPathComponent:@"logs"];
  274. if (![NSFileManager.defaultManager fileExistsAtPath:logUrl.path]) {
  275. [NSFileManager.defaultManager createDirectoryAtURL:logUrl withIntermediateDirectories:YES attributes:NULL error:NULL];
  276. }
  277. // dispatch_queue_t reinitProxyQueue = dispatch_queue_create("reinit_proxy", 0);
  278. //
  279. //
  280. // [cachesFileManager writeLogsWithMsg:@"tryReconnect initProxy 0"];
  281. // dispatch_async(reinitProxyQueue, ^{
  282. // NSData *sdnInfo = [NSData dataWithContentsOfURL:[[NSBundle.mainBundle bundleURL] URLByAppendingPathComponent:@"planet.1ali_3ry_peer"]];
  283. //
  284. // /// 1. 初始化代理库
  285. // [cachesFileManager writeLogsWithMsg:@"tryReconnect initProxy 1"];
  286. // self->disconnected_cb_type = NO;
  287. // self->_isReInitType = YES;
  288. // [RaylinkProxy.sharedManager initProxy:logUrl.path rootSdnInfo:sdnInfo];
  289. // self->_isReInitType = NO;
  290. // [cachesFileManager writeLogsWithMsg:@"tryReconnect initProxy 2"];
  291. // });
  292. // //KWeakSelf
  293. // NSMutableDictionary *paraDict = [NSMutableDictionary new];
  294. // if(self.DeviceThirdIdMod.data.sn){
  295. // [paraDict setValue:self.DeviceThirdIdMod.data.sn forKey:@"sn"];
  296. // }
  297. //
  298. // [cachesFileManager writeLogsWithMsg:@"tryReconnect CommonGetWithCallBackCode"];
  299. // [[netWorkManager shareInstance] CommonGetWithCallBackCode:getThirdIdBySn Parameters:paraDict success:^(id _Nonnull responseObject) {
  300. //
  301. // dispatch_async(self->initProxyQueue, ^{
  302. // NSData *sdnInfo = [NSData dataWithContentsOfURL:[[NSBundle.mainBundle bundleURL] URLByAppendingPathComponent:@"planet.1ali_3ry_peer"]];
  303. //
  304. // /// 1. 初始化代理库
  305. // [RaylinkProxy.sharedManager initProxy:logUrl.path rootSdnInfo:sdnInfo];
  306. // [cachesFileManager writeLogsWithMsg:@"tryReconnect initProxy"];
  307. // });
  308. //
  309. //
  310. // } failure:^(NSError * _Nonnull error) {
  311. // HLog("网络报错");
  312. // }];
  313. }
  314. //音视频 链接返回-5的时候调用
  315. - (void)recreateHttpServiceFun{
  316. // [cachesFileManager writeLogsWithMsg:@"recreateHttpServiceFun"];
  317. // NSString *sdnId = self.DeviceThirdIdMod.data.sdnId;
  318. // self.tcpPort = [RaylinkProxy.sharedManager createHttpService:sdnId];
  319. // self.tcpPortStr = [[NSString alloc] initWithFormat:@"%ld",self.tcpPort];
  320. // [[netWorkManager shareInstance] setAFHTTPSessionManagerFunBy:self.tcpPort];
  321. // [RaylinkProxy.sharedManager addSdnId:sdnId ip:ruiyunlinkIp allowPort:9300];
  322. // [RaylinkProxy.sharedManager addSdnId:sdnId ip:ruiyunlinkIp allowPort:9100];
  323. // [RaylinkProxy.sharedManager addSdnId:sdnId ip:ruiyunlinkIp allowPort:9888];
  324. }
  325. //- (void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port {
  326. //
  327. // NSLog(@"didConnectToHost %d", port);
  328. //
  329. // NSThread *thread = [[NSThread alloc] initWithBlock:^{
  330. // while (true) {
  331. //
  332. // [self.socket readDataWithTimeout:-1 tag:0];
  333. // [NSThread sleepForTimeInterval:0.1];
  334. //
  335. // }
  336. // }];
  337. //
  338. // [thread start];
  339. //
  340. // /// 7. Socket 连接成功后,通过 socket 发送, self.peerPortTF 为对端服务端口
  341. // //[sock writeData:[[NSString stringWithFormat:@"CONNECT 127.0.0.1:%@ HTTP/1.0\r\n\r\n", @"9100"] dataUsingEncoding:NSUTF8StringEncoding] withTimeout:-1 tag:0];
  342. //
  343. // NSLog(@"readDataToData");
  344. //
  345. // [cachesFileManager writeLogsWithMsg:@"didConnectToHost writeData"];
  346. //}
  347. //
  348. //- (void)socket:(GCDAsyncSocket *)sock didWriteDataWithTag:(long)tag
  349. //{
  350. // NSLog(@"socket:%p didWriteDataWithTag:%ld", sock, tag);
  351. //}
  352. //
  353. //- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag {
  354. //
  355. //
  356. // if (tag == 0) {
  357. //
  358. // NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
  359. //
  360. // /// 8. 收到包含 `HTTP/1.0 200`的字符串,则认为连接成功。可以正常给对端发消息了
  361. // if ([str containsString:@"HTTP/1.0 200"]) {
  362. // NSLog(@"Connected");
  363. // self.peerConnected = YES;
  364. //// self.connectBtn.enabled = YES;
  365. //// [self.connectBtn setTitle:@"断开连接" forState:UIControlStateNormal];
  366. // }
  367. //
  368. // }
  369. //
  370. // //self.revcLab.text = [NSString stringWithFormat:@"接收:%@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]];
  371. //}
  372. #pragma mark 保持卡密码
  373. -(void)updateCardInfoBySN:(NSString*)snStr withPwdStr:(NSString*)pwd didNetEnd:(netWork_DidEndByOK)didNetEndIsOK
  374. {
  375. NSMutableDictionary *paraDict = [NSMutableDictionary new];
  376. [paraDict setValue:snStr forKey:@"sn"];
  377. NSString* enPwdStr = [RSATool AES128Encrypt:pwd key:AESCODEKEEYY];
  378. if(enPwdStr){
  379. [paraDict setValue:enPwdStr forKey:@"password"];
  380. }
  381. //KWeakSelf
  382. [[netWorkManager shareInstance] CommonPostCallBackCode:updateCardInfo Parameters:paraDict success:^(id _Nonnull responseObject) {
  383. SuperModel*model = [[SuperModel alloc] initWithDictionary:responseObject error:nil];
  384. if(model && model.status == 0)
  385. {
  386. didNetEndIsOK(YES);
  387. ksharedAppDelegate.DeviceThirdIdMod.data.password = enPwdStr;
  388. /*密码保持在本地*/
  389. NSDictionary *deviceDict = [HWDataManager getObjectWithKey:Const_Have_Add_Device];
  390. NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithDictionary:deviceDict];
  391. [dict setObject:pwd forKey:Const_Have_Add_Device_PWD];
  392. [HWDataManager setObjectWithKey:Const_Have_Add_Device value:dict];
  393. }
  394. else{
  395. didNetEndIsOK(NO);
  396. }
  397. } failure:^(NSError * _Nonnull error) {
  398. HLog("网络报错");
  399. didNetEndIsOK(NO);
  400. }];
  401. }
  402. #pragma mark ---ping-----站点 判断是否是局域网
  403. - (void)startPingDeviceIp:(NSString *)roomInternetIp
  404. {
  405. //roomInternetIp = @"www.baidu.com";
  406. if(!roomInternetIp || roomInternetIp.length < 7){
  407. self.isPingOk = NO;
  408. return;
  409. }
  410. if (self->whPingTester)
  411. {
  412. [self->whPingTester stopPing];
  413. self->whPingTester = nil;
  414. }
  415. self->whPingTester = [[WHPingTester alloc] initWithHostName:roomInternetIp];
  416. self->whPingTester.delegate = self;
  417. //self->whPingTester.countdownTime = 1; //1秒ping一次
  418. [self->whPingTester startPing];
  419. /// 启动定时器监听 10秒后 whPingTester的状态
  420. KWeakSelf
  421. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  422. if(self->whPingTester){
  423. [weakSelf didGetPingStateIsOK:NO];
  424. }
  425. });
  426. }
  427. #pragma mark ---ping---- 代理回调
  428. - (void) didPingSucccessWithTime:(float)time withError:(NSError*) error
  429. {
  430. HLog(@"time:%f \n error: %@",time,error)
  431. //if(error.code == 111 || time > 1000) //超时或者延时超过100ms,就要记录数据
  432. if(error != nil)
  433. {
  434. [self didGetPingStateIsOK:NO];
  435. }
  436. else if(time > 0){
  437. [self didGetPingStateIsOK:YES];
  438. //test code
  439. //[self didGetPingStateIsOK:NO];
  440. }
  441. }
  442. - (void) didPingfialewithError:(NSError*)error
  443. {
  444. HLog(@" error error: %@",error)
  445. [self didGetPingStateIsOK:NO];
  446. }
  447. -(void)didGetPingStateIsOK:(BOOL)isOk
  448. {
  449. self.isPingOk = isOk;
  450. [self->whPingTester stopPing];
  451. self->whPingTester = nil;
  452. didPingType = YES;
  453. [self beginLinkWebSocketFun];
  454. }
  455. - (void)beginLinkWebSocketFun
  456. {
  457. if(!didPingType){
  458. return;
  459. }
  460. //局域网不通 瑞云还没连接好
  461. if(!self.isPingOk && !didRuiyunLinkType){
  462. return;
  463. }
  464. //切换设备
  465. // if([webSocketManager shareInstance].commandChannelManager){
  466. //
  467. //// [[webSocketManager shareInstance].commandChannelManager rc_close];
  468. //// [webSocketManager shareInstance].commandChannelManager = nil;
  469. // ksharedAppDelegate.isWebSockLinkOKAginType = NO;
  470. // dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
  471. // if([connectDeviceManager shareInstance].isFirstInputPwdDone){
  472. // [[webSocketManager shareInstance] opencommandChannelManagerrc_openURL];
  473. // }
  474. // });
  475. // }
  476. // else{//第一次启动
  477. // if([connectDeviceManager shareInstance].isFirstInputPwdDone){
  478. // [[webSocketManager shareInstance] opencommandChannelManagerrc_openURL];
  479. // }
  480. // }
  481. }
  482. @end