// // SecondConnectWifiController.m // Ifish // // Created by imac on 16/2/24. // Copyright © 2016年 imac. All rights reserved. // #import "SPAlertController.h" #import "ConfigWifiViewController.h" #import #import "DeviceModel.h" #import "SaySomethingViewController.h" #import "ConnectErrorViewController.h" #import "AppDelegate.h" #import "ESP_NetUtil.h" #import "ESPTouchTask.h" #import "ESPTouchResult.h" #import "ESPTouchDelegate.h" #import "MyMD5.h" #import "ChatroomModel.h" #import "MMProgressHUD.h" #import "MMProgressHUDOverlayView.h" #define ALERTVIEW_TAG 11001 #define WIFI_KEYBOARD 30 #import "IfishDataUnity.h" #import "Utils.h" #import "IfishConnectingView.h" #import "PushMasssageWebViewController.h" #import "IfishUserObsever.h" #import #import "ConnectHotpotViewController.h" #import "ConAquarNowWiFiPwdVC.h" #import "InfoByImageViewController.h" #import "YooseeNextConnectViewController.h" #import "HKPieChartView.h" #import "dataContorl.h" #import #import "IFishHotpotUDPHelper.h" #import "ESPTouchResult.h" #import "ESPTouchTask.h" #import "IfishDataUnity.h" #import "MyMD5.h" #import #import "UIView+Toast.h" #import "ContactDAO.h" #import "AppDelegate.h" #import "UDManager.h" #import "LoginResult.h" #import "Utils.h" #import "RightViewController.h" #import "LeftViewController.h" #import "IfishCameraModel.h" #import "FListManager.h" #define GIWEI_INITPASS @"123" #import "IfishP2PMonitorController.h" #import "LXWaveProgressView.h" #import "IfishConnectingView.h" #import "PushMasssageWebViewController.h" #import "IfishUserObsever.h" #import #import "MyMD5.h" #import "IfishUserDataUnity.h" #import "DeviceCameraModel.h" #import "ConAquarChooseWiFiVC.h" #import "InfoByImageViewController.h" typedef NS_ENUM(NSInteger,lodingViewdissMissStyle) { lodingViewdissMissSuccsess=0,// default is 0 lodingViewdissMissfail, lodingViewdissMissAlreadyBinded }; @interface ConfigWifiViewController () @property (nonatomic, strong) NSCondition *_condition; @property (atomic, strong) ESPTouchTask *_esptouchTask; @property (nonatomic, strong) EspTouchDelegateImpl *_esptouchDelegate; @property(nonatomic,strong)NSMutableArray*deviceArry; @property(nonatomic,strong)ICSDrawerController*ics; @property(nonatomic)BOOL autodismiss; @property(nonatomic,assign)lodingViewdissMissStyle lodviewMissStyle; @property(nonatomic,retain) NSTimer* getInfTimer ; @property(nonatomic,copy)NSString*deviceId; @property(nonatomic,strong) UILabel *maclabel; @property (nonatomic, assign) BOOL isGoChangeWiFi; @property (nonatomic, strong) JMAirKissConnection *airKissConnection; //摄像头变量 @property (strong, nonatomic) NSString *lastSetPassword; @property (strong,nonatomic) NSMutableDictionary *addresses; @property (strong,nonatomic) NSMutableDictionary *linkDict; @property (copy, nonatomic) NSString *deviceID;//摄像头设备id @property (assign, nonatomic) BOOL isDeviceLinkIn;//是否已经连接智能设备 Strong CLLocationManager *locationManager;//iOS13,获取WiFi名称必须开启定位权限 Strong NSMutableString *trackString; Strong MBProgressHUD *HUD; Strong NSTimer *timer; Strong UITapGestureRecognizer*tap; /** 设备返回的mac地址 */ Copy NSString *macAddress; /** 是否正在绑定设备 */ Assign BOOL isBindingDevice; Strong NSTimer *bindTimer; Assign NSInteger retryTimes; @end //extern BOOL formLogIn;//连接页面是否来自登录界面 extern BOOL isfromCameraView; @implementation ConfigWifiViewController -(JMAirKissConnection *)airKissConnection { if(!_airKissConnection) { _airKissConnection= [[JMAirKissConnection alloc]init]; } return _airKissConnection; } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view from its nib. [self addTitleViewWithTitle:self.titleString]; self.view.backgroundColor=[UIColor whiteColor]; if(self.deviceType == DEVICECAMERA) { self.connectType = ConnectTypeSmartConfig; self.connectTypeTitle.text=@"智能配网"; } else { self.connectType = ConnectTypeAirKiss; } //摄像头 self.isDeviceLinkIn = NO; [GWP2PDeviceLinker shareInstance].delegate=self; self.deviceID=nil; self.addresses = [[NSMutableDictionary alloc] initWithCapacity:1]; self.linkDict = [[NSMutableDictionary alloc] initWithCapacity:1]; _deviceArry =[[NSMutableArray alloc]init]; //输入框在上面新UI 可去 _wifiTextFiled.delegate=self; _wifiTextFiled.layer.masksToBounds=YES; _wifiTextFiled.layer.cornerRadius=5; // if (@available(iOS 13.0, *)){//iOS13之后,设置颜色的方便变更 // // }else{ // [_wifiTextFiled setValue:[UIColor lightGrayColor] forKeyPath:@"_placeholderLabel.textColor"]; // } // UIView*phoneView=[[UIView alloc]initWithFrame:CGRectMake(0,0, 9, 10)]; // self.wifiTextFiled.leftView=phoneView; // self.wifiTextFiled.textColor = RGB_51; self.wifiTextFiled.leftViewMode=UITextFieldViewModeAlways; // [self addTitleViewWithTitle:self.vcTitle]; self.rightButton = [UIButton buttonWithType:UIButtonTypeCustom]; self.rightButton.frame = CGRectMake(0, 0, 50, 44); [self.rightButton setBackgroundImage:[UIImage imageNamed:@"qr"] forState:UIControlStateNormal]; [self.rightButton addTarget:self action:@selector(rightButtonClickItem:) forControlEvents:UIControlEventTouchUpInside]; self.rightItem = [[UIBarButtonItem alloc] initWithCustomView:self.rightButton]; // self.navigationItem.rightBarButtonItem = self.rightItem; UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil]; self.navigationItem.backBarButtonItem = item; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(viewWillEnterForeground:) name:Noti_WillEnterForeground object:nil]; [self creatConnectStateUI]; //获取WiFi名称 [self getSSid]; } -(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; } -(void)viewDidDisappear:(BOOL)animated{ [super viewDidDisappear:animated]; } -(void)goBackAction{ if(self.connectingView.hidden==NO) { if(_airKissConnection) { [_airKissConnection closeConnection]; _airKissConnection = nil; } [self connectNormalView]; } else { [self.navigationController popViewControllerAnimated:YES]; } } #pragma mark -连接不上? -(void)connectTypeClick:(UIButton *)btn { if(self.indicator.isAnimating) { [self.view makeToast:@"绑定中..."]; return; } WEAK_SELF; NSString*red =@"2、先长按插座复位键3秒,松手后红灯绿灯同时 闪烁,再点确定按钮。"; NSString* tips = @"提示:由于新版APP升级,产品包装盒内的说明书可能与新版APP联网方式不同,请以APP界面提示内容为准,也可查看右上角视频教程。"; NSString*red2 =@"2、先长按插座复位键13秒左右,松手后红灯绿灯同时熄灭,只有绿灯偶尔闪烁,再点下一步。"; NSString* tips2 = @"提示:由于新版APP升级,产品包装盒内的说明书可能与新版APP联网方式不同,请以APP界面提示内容为准,也可查看右上角视频教程。"; NSString*airkisTitle = @"一键联网"; NSString*smartTitle = @"快捷联网"; NSString*apTitle = @"AP联网"; NSString*airkisTips = @"1、插座仅支持2.4G的WiFi网络,不支持5G 及 双频合一的网络(需在路由器设置中分开)\n2、先长按插座复位键3秒,松手后红灯绿灯同时 闪烁,再点确定按钮。\n3、如多次尝试一键联网都不成功,可切换其他 联网方式,每次重新连接时插座需断一次电然后重新复位连接。\n提示:由于新版APP升级,产品包装盒内的说明书可能与新版APP联网方式不同,请以APP界面提示内容为准,也可查看右上角视频教程。"; NSString*smartTips = airkisTips; NSString*apTips = @"1、插座仅支持2.4G的WiFi网络,不支持5G 及 双频合一的网络(需在路由器设置中分开)\n2、先长按插座复位键13秒左右,松手后红灯绿灯同时熄灭,只有绿灯偶尔闪烁,再点下一步。\n提示:由于新版APP升级,产品包装盒内的说明书可能与新版APP联网方式不同,请以APP界面提示内容为准,也可查看右上角视频教程。"; NSMutableAttributedString*attair = [[NSMutableAttributedString alloc]initWithString:airkisTips attributes:@{NSForegroundColorAttributeName:[UIColor blackColor],NSFontAttributeName:[UIFont systemFontOfSize:16]}]; [attair addAttributes:@{NSForegroundColorAttributeName:[UIColor redColor]} range:[airkisTips rangeOfString:red]]; [attair addAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:11]} range:[airkisTips rangeOfString:tips]]; NSMutableAttributedString*attap = [[NSMutableAttributedString alloc]initWithString:apTips attributes:@{NSForegroundColorAttributeName:[UIColor blackColor],NSFontAttributeName:[UIFont systemFontOfSize:16]}]; [attap addAttributes:@{NSForegroundColorAttributeName:[UIColor redColor]} range:[apTips rangeOfString:red2]]; [attap addAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:11]} range:[apTips rangeOfString:tips2]]; SPAlertController*alert =[SPAlertController alertControllerWithTitle:nil message:nil preferredStyle:SPAlertControllerStyleActionSheet animationType:SPAlertAnimationTypeDefault]; SPAlertAction*airkiss =[SPAlertAction actionWithTitle:airkisTitle style:SPAlertActionStyleDefault handler:^(SPAlertAction * _Nonnull action) { [weakSelf connectNormalView]; weakSelf.connectType = ConnectTypeAirKiss; weakSelf.connectTypeTitle.text = airkisTitle; weakSelf.connectTipLbl.text = nil; weakSelf.connectTipLbl.attributedText = attair; //展示一键联网 weakSelf.shuoMingShuBtn.hidden = NO; [weakSelf.connectBtn setTitle:@"确定" forState:UIControlStateNormal]; }]; SPAlertAction*smart =[SPAlertAction actionWithTitle:smartTitle style:SPAlertActionStyleDefault handler:^(SPAlertAction * _Nonnull action) { [weakSelf connectNormalView]; weakSelf.connectType = ConnectTypeSmartConfig; weakSelf.shuoMingShuBtn.hidden = YES; weakSelf.connectTypeTitle.text = smartTitle; weakSelf.connectTipLbl.text = nil; weakSelf.connectTipLbl.attributedText = attair; [weakSelf.connectBtn setTitle:@"确定" forState:UIControlStateNormal]; }]; SPAlertAction*ap =[SPAlertAction actionWithTitle:apTitle style:SPAlertActionStyleDefault handler:^(SPAlertAction * _Nonnull action) { [weakSelf connectNormalView]; weakSelf.connectType = ConnectTypeAP; weakSelf.shuoMingShuBtn.hidden = YES; weakSelf.connectTypeTitle.text = apTitle; weakSelf.connectTipLbl.text = nil; weakSelf.connectTipLbl.attributedText = attap; [weakSelf.connectBtn setTitle:@"下一步" forState:UIControlStateNormal]; }]; SPAlertAction*cancel =[SPAlertAction actionWithTitle:@"取消" style:SPAlertActionStyleCancel handler:^(SPAlertAction * _Nonnull action) { }]; if(self.deviceType!=DEVICECAMERA) { [alert addAction:airkiss]; } [alert addAction:smart]; [alert addAction:ap]; [alert addAction:cancel]; [self presentViewController:alert animated:YES completion:nil]; } -(IBAction)shuoMingShuBtnAction:(UIButton *)btn{ // InfoByImageViewController*info=[[InfoByImageViewController alloc]init]; // info.title=NSLocalizedString(@"ifish_deviceuse", nil);;; // info.type=@"instruction"; // info.image=[UIImage imageNamed:@"instruction"]; // [self.navigationController pushViewController:info animated:YES]; NSURL*url = [NSURL URLWithString:@"https://www.ifish7.com/download/20231205193033.mp4"]; [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:^(BOOL success) { }]; } //ap模式 -(IBAction)goSettingClick:(UIButton*)button { if(self.connectType == ConnectTypeAP) { NSURL * url = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; if([[UIApplication sharedApplication] canOpenURL:url]) { if (@available(iOS 10.0, *)) { [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil]; }else { [[UIApplication sharedApplication] openURL:url]; } self.isGoChangeWiFi = YES; } } } -(void)creatConnectStateUI{ [self connectNormalView]; } -(void)connectNormalView { self.connectingView.hidden=YES; self.connectBtn.hidden = NO; self.reasonBtn.hidden = YES; self.resultLabel.hidden = YES; self.line.hidden = YES; [self.indicator stopAnimating]; } -(void)connectNotNormalView { self.connectingView.hidden=NO; [self.indicator startAnimating]; self.reasonBtn.hidden = YES; self.resultLabel.hidden = YES; self.line.hidden = YES; self.connectBtn.hidden = YES; } -(void)showFailResultViewWithMsg:(NSString*)msg { self.connectingView.hidden=NO; [self.indicator stopAnimating]; self.connectBtn.hidden = YES; self.reasonBtn.hidden = NO; self.resultLabel.hidden = NO; self.line.hidden = NO; self.resultLabel.text = msg?:@"连接失败"; } -(void)initMacIdString:(NSString *)ssid{ if (!_maclabel) { _maclabel=[[UILabel alloc] init]; } _maclabel.text =ssid; if (ssid) { _maclabel.text =[NSString stringWithFormat:@"设备mac:%@",ssid]; }else{ _maclabel.text = @"无设备mac"; } [self showFailResultViewWithMsg:_maclabel.text]; NSMutableAttributedString * attributedString = [[NSMutableAttributedString alloc] initWithString:_maclabel.text]; NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle alloc] init]; [paragraphStyle setLineSpacing:8]; [attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [_maclabel.text length])]; [attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor whiteColor] range:NSMakeRange(0,[_maclabel.text length])]; [_maclabel setAttributedText:attributedString]; [_maclabel setTextColor:[UIColor colorWithRed:153.0/256.0 green:153.0/256.0 blue:153.0/256.0 alpha:1] ]; [_maclabel sizeToFit]; CGFloat LabelTitleW =200; CGFloat LabelTitleH = 20; _maclabel.frame = CGRectMake(kScreenSize.width/2-LabelTitleW/2,CGRectGetMaxY(self.wifiTextFiled.frame)+20, LabelTitleW, LabelTitleH); // [self.view addSubview:_maclabel]; // [self.view bringSubviewToFront:_maclabel]; self.bakbutton.userInteractionEnabled=YES; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [self.view makeToast:_maclabel.text]; }); } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } -(void)initMMProgressHUD{ NSMutableArray *images = [[NSMutableArray alloc] init]; for (int i = 1; i <= 63; i ++) { if (i < 10) { [images addObject:[UIImage imageNamed:[NSString stringWithFormat:@"neves000%d",i]]]; }else{ [images addObject:[UIImage imageNamed:[NSString stringWithFormat:@"neves00%d",i]]]; } } _autodismiss = YES;//MMProgressHUDWindowOverlayModeLinear [MMProgressHUD setPresentationStyle:MMProgressHUDPresentationStyleNone]; /** * status: Custom Animated Image */ [MMProgressHUD showWithTitle:@"" status:@"" images:images]; } -(void)mmPogressHUDdismiss{ // if (_autodismiss == YES) { // double delayInSeconds = 2.0; // dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); // dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ [self setMMProgressHUDMissStayle:self.lodviewMissStyle]; // }); // } } -(void)setMMProgressHUDMissStayle:(lodingViewdissMissStyle)missStyle{ switch (missStyle) { case lodingViewdissMissSuccsess: { [MMProgressHUD dismissWithSuccess:@""]; } break; case lodingViewdissMissfail: { [MMProgressHUD dismissWithError:@""]; [self.view makeToast:@"再试一下!"]; [self initMacIdString:_deviceBssid]; } break; case lodingViewdissMissAlreadyBinded: { [MMProgressHUD dismissWithSuccess:@""]; [self.view makeToast:@"已经绑定过了!"]; } default: break; } } -(void)showTitle:(NSString*)title messsage:(NSString*)message{ UIAlertView *alert=[[UIAlertView alloc]initWithTitle:title message:message delegate:nil cancelButtonTitle:nil otherButtonTitles:nil, nil]; NSTimeInterval dismissSeconds=1.0; [alert show]; [self performSelector:@selector(dismissAlert:) withObject:alert afterDelay:dismissSeconds]; } -(void)dismissAlert:(UIAlertView*)alertView{ [alertView dismissWithClickedButtonIndex:[alertView cancelButtonIndex] animated:YES]; } -(void)initWifiImage{ } /* #pragma mark - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { // Get the new view controller using [segue destinationViewController]. // Pass the selected object to the new view controller. } */ - (IBAction)cancleButton:(id)sender { [_wifiTextFiled resignFirstResponder]; [self.navigationController popViewControllerAnimated:YES]; } #pragma mark 连接设备 - (IBAction)makeSureButton:(id)sender { if (!_ssid.length) { [self.view makeToast:@"未能获取到WiFi名称,请确认地理位置权限是否打开"]; return; } if (!_wifiTextFiled.text.length) { [self.view makeToast:@"请输入WiFi密码!"]; return; } [_wifiTextFiled resignFirstResponder]; NSString *ssidName = @""; if (_ssid.length>2) { ssidName= [_ssid substringWithRange:NSMakeRange(_ssid.length-2, 2)]; } if ([ssidName.uppercaseString isEqualToString:@"5G"]) { UIAlertView *alert= [[UIAlertView alloc] initWithTitle:@"" message:@"仅支持2.4G WI-Fi网络,请重新选择" delegate:nil cancelButtonTitle:@"去更改" otherButtonTitles:nil, nil]; [alert show]; return; } BOOL isRight =[dataContorl isIncludeSpecialCharact:_wifiTextFiled.text]; if (!isRight) { [self.view makeToast:@"您输入的密码带特殊符号,请更改路由器密码。"]; return; } [self savePassw]; [self configWifiForDevice]; // [self initMMProgressHUD]; [self connectNotNormalView]; if (_maclabel) { [_maclabel removeFromSuperview]; } } - (IBAction)lickHereBtnClicked:(id)sender { // ConnectHotpotViewController *vc = [[ConnectHotpotViewController alloc] init]; ConAquarNowWiFiPwdVC *vc = [[ConAquarNowWiFiPwdVC alloc]init]; vc.ssid = self.ssid; vc.bssid = self.bssid; vc.deviceType=self.deviceType; [self.navigationController pushViewController:vc animated:YES]; } - (IBAction)commandbackBtn:(id)sender { SaySomethingViewController*say=[[SaySomethingViewController alloc]init]; [self.navigationController pushViewController:say animated:YES]; self.navigationController.navigationBarHidden=NO; } //问题自查 - (IBAction)discoverQuestionBtn:(id)sender { ConnectErrorViewController*error=[[ConnectErrorViewController alloc]init]; [self.navigationController pushViewController:error animated:YES]; self.navigationController.navigationBarHidden=NO; } -(void)getSSid{ Reachability *currReach = [Reachability reachabilityForLocalWiFi]; NetworkStatus status = [currReach currentReachabilityStatus]; NSLog(@"%ld", (long)status); if (status==AFNetworkReachabilityStatusReachableViaWiFi) { [self connectMyWIFI]; }else{ [self showTitle:@"" messsage:@"请切换到WiFi环境下绑定"]; } } -(void)connectMyWIFI{ [CommonUtils getNetworkTypeComplete:^(NSString *netconnType, NSString *BSSID, NSString *SSID) { NSUserDefaults*userDefsult=[NSUserDefaults standardUserDefaults]; NSString*pass=[userDefsult objectForKey:@"wifiPass"]; _ssid = SSID; _bssid = BSSID; NSString *msg = [NSString stringWithFormat:@"请输入当前WiFi:%@的密码",_ssid]; NSMutableAttributedString * attributedString = [[NSMutableAttributedString alloc] initWithString:msg]; NSMutableParagraphStyle *paraghStyle =[[NSMutableParagraphStyle alloc] init]; [paraghStyle setLineSpacing:4]; [attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor colorWithRed:0 green:170.0/255.0 blue:218.0/255.0 alpha:1] range:NSMakeRange(msg.length - 3 -_ssid.length,_ssid.length)]; [attributedString addAttribute:NSParagraphStyleAttributeName value:paraghStyle range:NSMakeRange(0, msg.length)]; // [_wifiNamelabel setAttributedText:attributedString]; _wifiNamelabel.text=_ssid; _wifiTextFiled.secureTextEntry=NO; _wifiTextFiled.text=pass; _wifiTextFiled.clearButtonMode=UITextFieldViewModeAlways; //[self bindDeviceWithSsid:@"5ccf7f003a93"]; // 5CCF7F00669C // 5CCF7F006668 // 5CCF7F0065CA }]; } -(void)checkLocation{ NSString* phoneVersion = [[UIDevice currentDevice] systemVersion]; CGFloat version = [phoneVersion floatValue]; // 如果是iOS13 未开启地理位置权限 需要提示一下 if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined && version >= 13) { self.locationManager = [[CLLocationManager alloc] init]; [self.locationManager requestWhenInUseAuthorization]; } } // refer to http://stackoverflow.com/questions/5198716/iphone-get-ssid-without-private-library //保存wifi密码 -(void)savePassw{ NSUserDefaults*userdefult=[NSUserDefaults standardUserDefaults]; [userdefult setObject:self.wifiTextFiled.text forKey:@"wifiPass"]; self.wifiPass=self.wifiTextFiled.text; [userdefult synchronize]; } - (void)configWifiForDevice{ NSLog(@"ViewController do confirm action..."); if(_airKissConnection) { [_airKissConnection closeConnection]; _airKissConnection = nil; } WEAK_SELF; void(^success)(NSString*deviceBssid)=^(NSString*deviceBssid) { weakSelf.airKissConnection=nil; weakSelf.deviceBssid=deviceBssid; NSArray*arry=[[DataCenter defaultDtacenter]valueForKey:@"deviceInfo"]; DeviceModel*model=[[DeviceModel alloc]init]; //if (arry.count<5) { NSMutableArray*macdressArr=[[NSMutableArray alloc]init]; for (model in arry) { [macdressArr addObject:model.macAddress]; } BOOL exst=[macdressArr containsObject:_deviceBssid]; if (exst) { weakSelf.lodviewMissStyle=lodingViewdissMissAlreadyBinded; [weakSelf mmPogressHUDdismiss]; [weakSelf connectNormalView]; weakSelf.bakbutton.userInteractionEnabled=YES; //[self.navigationController popViewControllerAnimated:YES]; [weakSelf.view makeToast:@"该设备已存在"]; }else{ if (weakSelf.deviceType==DEVICEPETS) { [weakSelf showStoreNameView]; } else { [weakSelf bindDeviceWithSsid:_deviceBssid]; } } } }; void(^failure)(NSError*error,NSString*msg)=^(NSError*error,NSString*msg) { weakSelf.airKissConnection=nil; weakSelf.lodviewMissStyle=lodingViewdissMissfail; [weakSelf mmPogressHUDdismiss]; [weakSelf connectNormalView]; weakSelf.bakbutton.userInteractionEnabled=YES; if(msg.length) { [weakSelf.view makeToast:msg]; } [weakSelf showFailResultViewWithMsg:msg]; }; ConnectType type = weakSelf.connectType; dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); if(type == ConnectTypeAirKiss) { self.airKissConnection.connectionSuccess = success; self.airKissConnection.connectionFailure = ^{ failure(nil,nil); }; NSString *apSsid = self.ssid; NSString *apPwd = self.wifiTextFiled.text; [self.airKissConnection connectAirKissWithSSID:apSsid password:apPwd]; } else if(type==ConnectTypeSmartConfig) { if(self.deviceType == DEVICECAMERA) { UIAlertView *alert= [[UIAlertView alloc] initWithTitle:@"提示" message:@"即将使用声波连接,请调大手机音量,并靠近设备,确认设备已经重置(按复位小孔,听到“等待连接“或者“滴”)后再点击确认" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确认", nil]; alert.tag = ALERT_TAG_B_SURE; [alert show]; } else { dispatch_async(queue, ^{ NSLog(@"ViewController do the execute work..."); // execute the task NSArray *esptouchResultArray = [self executeForResults]; // show the result to the user in UI Main Thread dispatch_async(dispatch_get_main_queue(), ^{ // [self._spinner stopAnimating]; // [self enableConfirmBtn]; ESPTouchResult *firstResult = [esptouchResultArray objectAtIndex:0]; // check whether the task is cancelled and no results received if (!firstResult.isCancelled) { NSMutableString *mutableStr = [[NSMutableString alloc]init]; NSUInteger count = 0; // max results to be displayed, if it is more than maxDisplayCount, // just show the count of redundant ones const int maxDisplayCount = 100000; if ([firstResult isSuc]) { success(firstResult.bssid); for (int i = 0; i < [esptouchResultArray count]; ++i) { ESPTouchResult *resultInArray = [esptouchResultArray objectAtIndex:i]; [mutableStr appendString:[resultInArray description]]; [mutableStr appendString:@"\n"]; count++; if (count >= maxDisplayCount) { break; } } if (count < [esptouchResultArray count]) { [mutableStr appendString:[NSString stringWithFormat:@"\nthere's %lu more result(s) without showing\n",(unsigned long)([esptouchResultArray count] - count)]]; } } else { failure(nil,@"未获取到设备mac"); } } else if(firstResult.isCancelled) { failure(nil,@"连接被取消"); } else if(!esptouchResultArray.count) { failure(nil,@"未有设备响应"); [self.view makeToast:@"未有设备响应"]; } }); }); } } else if (type == ConnectTypeAP) { [UIPasteboard generalPasteboard].string=@"12345678"; [self.view makeToast:@"密码已复制,可直接粘贴"]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.35 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [self goSettingClick:nil]; }); } } #pragma mark ap开始 -(void)viewWillEnterForeground:(NSNotification *)noti{ if (self.isGoChangeWiFi) { dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.35 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [self checkWiFi]; self.isGoChangeWiFi = NO; }); } } -(void)checkWiFi{ [CommonUtils getNetworkTypeComplete:^(NSString *netconnType, NSString *BSSID, NSString *SSID) { NSString *wifiName = SSID; //先判断之前的wifi名称是否和热点的wifi名称重复,如果冲突,则提示wifi名称错误 if ([wifiName isEqualToString:self.wifiNamelabel.text]) { [self.view makeToast:@"请先连接设备热点"]; return; } [self.timer invalidate]; self.timer = nil; if (self.connectType==ConnectTypeAP&&self.ssid.length&&self.wifiPass.length&&self.deviceType==DEVICECAMERA) { [self connectNotNormalView]; [self apLinkConnect]; } else { [self sendToDeviceWithSSIDName:self.ssid andSSIDPWD:self.wifiPass]; } }]; } - (void)sendToDeviceWithSSIDName:(NSString *)name andSSIDPWD:(NSString *)pwd { [self connectNotNormalView]; [IFishHotpotUDPHelper sharedInstance].delegate = self; [[IFishHotpotUDPHelper sharedInstance] broadCastHotspotConnectCommandWith:name pwd:pwd]; } #pragma mark - IFishHotpotUDPHelperDelegate //这里是连接到设备的路由器之后的回调方法 - (void)udpHelperCommandExecutedSuccess:(IFishUDPHelperBackMsgModel *)backModel { self.ssid = backModel.senderMacAddress; [self.view resignFirstResponder]; self.HUD.labelText = @"请稍后"; self.trackString = [NSMutableString string]; [self appendTrakContent:@"=================收到设备答复==================="]; [self appendTrakContent:[NSString stringWithFormat:@"答复状态码:%@", backModel.result]]; [self appendTrakContent:[NSString stringWithFormat:@"答复Mac地址:%@", backModel.senderMacAddress]]; self.deviceBssid = backModel.senderMacAddress; [IFishHotpotUDPHelper sharedInstance].delegate = nil; [[IFishHotpotUDPHelper sharedInstance] broadCastRestartCommand]; //这里需要连接到之前的路由器,才能绑定设备到 self.bindTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(startBinding) userInfo:nil repeats:YES]; } - (void)startBinding { [CommonUtils getNetworkTypeComplete:^(NSString *netconnType, NSString *BSSID, NSString *SSID) { if ([netconnType isEqualToString:@"no network"]||([netconnType isEqualToString:@"Wifi"]&&[SSID.lowercaseString hasPrefix:@"ifish"])) { //无网络 或者连接的还是设备的热点 } else { if (self.isBindingDevice||self.storeNameView) { return; } if (self.deviceBssid.length == 0) { return; } self.retryTimes = 0; if (self.deviceType==DEVICEPETS) { [self showStoreNameView]; } else { [self bindDeviceWithSsid:self.deviceBssid]; } } }]; } - (void)udpHelperMessage:(NSString *)msg { if (!self.timer) { return; } [MBProgressHUD hideHUDForView:self.view animated:YES]; self.HUD = [MBProgressHUD showHUDAddedTo:self.view animated:YES]; self.HUD.mode = MBProgressHUDModeIndeterminate; self.HUD.labelText = msg; if ([msg containsString:@"Socket连接失败"]) { [self.HUD hide:YES afterDelay:3]; if (self.retryTimes<10) { self.retryTimes++; WEAK_SELF; [[IFishHotpotUDPHelper sharedInstance] closeComplete:^{ [weakSelf sendToDeviceWithSSIDName:weakSelf.ssid andSSIDPWD:weakSelf.wifiPass]; }]; } else { ; } } } - (void)appendTrakContent:(NSString *)msg { } #pragma mark Ap结束 - (NSArray *) executeForResults { [self._condition lock]; NSString *apSsid = self.ssid; NSString *apPwd = self.wifiTextFiled.text; NSString *apBssid = self.bssid; BOOL isSsidHidden = YES; // int taskCount = [self._taskResultCountTextView.text intValue]; int taskCount=1; self._esptouchTask = [[ESPTouchTask alloc]initWithApSsid:apSsid andApBssid:apBssid andApPwd:apPwd andIsSsidHiden:isSsidHidden]; // set delegate // [self._esptouchTask setEsptouchDelegate:self._esptouchDelegate]; [self._esptouchTask setPackageBroadcast:YES]; [self._condition unlock]; NSArray * esptouchResults = [self._esptouchTask executeForResults:taskCount]; NSLog(@"ViewController executeForResult() result is: %@",esptouchResults); return esptouchResults; } -(UIView *)mask { if (!_mask) { UIView*mask=[[UIView alloc]initWithFrame:self.view.bounds]; mask.backgroundColor=[UIColor lightGrayColor]; mask.alpha=0.5; _mask=mask; UITapGestureRecognizer*tap=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(dismissStore)]; // [mask addGestureRecognizer:tap]; } return _mask; } -(void)dismissStore { [self.storeNameView removeFromSuperview]; [self.mask removeFromSuperview]; [self connectNormalView]; } -(void)showStoreNameView { [self.storeNameView removeFromSuperview]; StoreNameView*store=[[[NSBundle mainBundle] loadNibNamed:@"StoreNameView" owner:self options:nil] lastObject]; store.frame=CGRectMake((SCREEN_WIDTH-280)/2.0, 100, 280, 280); self.storeNameView.center=self.mask.center; self.storeNameView=store; WEAK_SELF; store.cancelBlock=^(){ [weakSelf.mask removeFromSuperview]; [weakSelf.storeNameView removeFromSuperview]; [weakSelf connectNormalView]; }; store.sureBlock=^(NSString*name) { if (!name.length) { [weakSelf.view makeToast:@"请设置或者选择名称!"]; return ; } [weakSelf.mask removeFromSuperview]; [weakSelf.storeNameView removeFromSuperview]; weakSelf.storeName=name; [weakSelf bindDeviceWithSsid:_deviceBssid]; }; [self.view addSubview:self.mask]; [self.view addSubview:self.storeNameView]; } #pragma mark 摄像头 //密码 -(void)resetPassWord{ NSString *newPassword = GIWEI_INITPASS; self.lastSetPassword = [Utils GetTreatedPassword:newPassword]; } #pragma mark - 搜索到设备,弹出添加设备提示 暂不用 /** 局域网里面有设备联网成功后,都会回调此方法。UDP使用 @param deviceDict 设备信息 */ - (void)p2pDeviceLinker:(GWP2PDeviceLinker *)linker deviceLinkSuccess:(NSDictionary *)deviceDict { NSLog(@"扫描到设备"); [self deviceLinkin:deviceDict linkType:self.connectType == ConnectTypeAP?conectType_ap:conectType_Intelligent ]; } -(void)deviceLinkin:(NSDictionary*)deviceDict linkType:(NSInteger)type { NSLog(@"声波配网成功,返回数据:%@",deviceDict); NSString *deviceID = [deviceDict[@"deviceID"] stringValue]; NSString *deviceIP = deviceDict[@"deviceIP"]; if ([self.linkDict[deviceID] boolValue]) { return; } //AP配网时有值 smart没有值 if ([self.deviceID isEqualToString:deviceID]||self.deviceID==nil) { if (type==conectType_Intelligent) { [self.view makeToast:@"声波配网成功"]; [[GWP2PDeviceLinker shareInstance] p2pStopSmartLink]; } else { [self.view makeToast:@"AP配网成功"]; [[GWP2PDeviceLinker shareInstance] p2pStopAPLink]; } // NSString *devicePassword = deviceDict[@"devicePassword"]; self.deviceID = deviceID; self.linkDict[deviceID]=@(YES); [self resetPassWord];//初始化密码 if (![deviceDict[@"isInitPassword"] boolValue]){ //设备没有初始化密码,设置密码 [[GWP2PClient sharedClient] setDeviceInitialPassword:self.lastSetPassword withDeviceID:deviceIP completionBlock:^(GWP2PClient *client, BOOL success, NSDictionary *dataDictionary) { NSLog(@"success:%i %@",success,dataDictionary); [self resetPassWord];//初始化密码 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [self bindCameraDevice]; }); }]; }else{//如果已经设置过初始密码,则直接使用 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [self bindCameraDevice]; }); } } } -(void)deviceLinkinTimeout:(NSInteger)type { // if (self.deviceID.length&&![self.linkDict[self.deviceID] boolValue]) {//90秒之后还未连接上,连接超时 [CommonUtils getNetworkTypeComplete:^(NSString *netconnType, NSString *BSSID, NSString *SSID) { [[GWP2PDeviceLinker shareInstance] p2pStopSmartLink]; [[GWP2PDeviceLinker shareInstance] p2pStopAPLink]; if ([SSID isEqualToString:self.ssid]) { [self.view makeToast:@"请确保Wifi密码正确,重置设备后再试!"]; } else { [self.view makeToast:[NSString stringWithFormat:@"WiFi连接失败,请确保手机连接到%@",self.ssid]]; } [self showFailResultViewWithMsg:@"连接超时"]; }]; } else if(!self.deviceID.length) { [self.view makeToast:@"获取设备ID失败"]; [[GWP2PDeviceLinker shareInstance] p2pStopSmartLink]; [[GWP2PDeviceLinker shareInstance] p2pStopAPLink]; [self connectNormalView]; } } -(void)apLinkConnect { WEAK_SELF; [[GWP2PDeviceLinker shareInstance] p2pStopAPLink]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(90 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [self deviceLinkinTimeout:self.connectType == ConnectTypeAP?conectType_ap:conectType_Intelligent]; }); [self resetPassWord];//初始化密码 [[GWP2PDeviceLinker shareInstance] p2pAPLinkDeviceWithWiFiSSID:weakSelf.ssid wifiPassword:weakSelf.wifiPass devicePassword:weakSelf.lastSetPassword deviceReceive:^(NSString *deviceId, BOOL isSupport) { if (isSupport) { weakSelf.deviceID=deviceId; [weakSelf.view makeToast:[NSString stringWithFormat:@"设备即将连接网络,请将手机自动重新连接到%@",weakSelf.ssid]]; } else { [weakSelf.view makeToast:@"该设备不支持AP配网"]; } } deviceLinkIn:^(NSDictionary *deviceDict) { [weakSelf deviceLinkin:deviceDict linkType:weakSelf.connectType == ConnectTypeAP?conectType_ap:conectType_Intelligent]; }]; } //智能联机 -(void)smartLinkConnect{ //拿到AVAudioSession的单例对象 AVAudioSession *audioSession = [AVAudioSession sharedInstance]; //设置为听筒模式 //[audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideNone error:nil]; //设置为公放模式 [audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:nil]; //让我的App占用听筒或扬声器 [audioSession setActive:YES error:nil]; WEAK_SELF; [[GWP2PDeviceLinker shareInstance] p2pStopSmartLink]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(100 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [[GWP2PDeviceLinker shareInstance] p2pStopSmartLink]; [self deviceLinkinTimeout:self.connectType == ConnectTypeAP?conectType_ap:conectType_Intelligent]; }); [[GWP2PDeviceLinker shareInstance] p2pSmartLinkDeviceWithWiFiSSID:weakSelf.ssid password:weakSelf.wifiPass useSimpleConfig:YES deviceLinkIn:^(NSDictionary *deviceDict) { [weakSelf deviceLinkin:deviceDict linkType:weakSelf.connectType == ConnectTypeAP?conectType_ap:conectType_Intelligent]; }]; } -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ if (alertView.tag==ALERT_TAG_B_SURE){ if (buttonIndex ==1) { //显示连接中效果 [self connectNotNormalView]; //声波智能联机 if (self.connectType==ConnectTypeSmartConfig) { [self smartLinkConnect]; } else { [self apLinkConnect]; } } }//重试wifi } //初始化设备密码回调 -(void)bindCameraDevice{ NSString * contactName = [NSString stringWithFormat:@"Cam%@", self.deviceID]; ContactDAO *contactDAO = [[ContactDAO alloc] init]; Contact *contact = [contactDAO isContact:self.deviceID]; if(contact!=nil){ contact.contactName = contactName; contact.contactPassword = self.lastSetPassword;//updatepwd [[FListManager sharedFList] updatee:contact]; [self ifishUserBindcameraIdBy:self.deviceID]; }else{ Contact *contact = [[Contact alloc] init]; contact.contactId = self.deviceID; contact.contactName = contactName; contact.contactPassword = self.lastSetPassword; contact.contactType = CONTACT_TYPE_UNKNOWN; [[FListManager sharedFList] insert:contact]; //设置密码成功后爱鱼奇用户绑定摄像头 [self ifishUserBindcameraIdBy:self.deviceID]; } } -(void)dealloc{ [[GWP2PDeviceLinker shareInstance] p2pStopSmartLink]; [[GWP2PDeviceLinker shareInstance] p2pStopAPLink]; [[NSNotificationCenter defaultCenter] removeObserver:self name:Noti_WillEnterForeground object:nil]; } #pragma mark - 绑定摄像头 //让爱鱼奇用户 与摄像头建立关系 -(void)ifishUserBindcameraIdBy:(NSString *)cameraId { NSLog(@"cameraId = %@",cameraId); NSMutableArray *oldCameraArr= [[DataCenter defaultDtacenter]valueForKey:@"cameraArr"]; if (!oldCameraArr) { //无设备 oldCameraArr = [[NSMutableArray alloc] init]; } IfishCameraModel *camer=[[IfishCameraModel alloc] init]; NSMutableArray *idArr=[[NSMutableArray alloc] init]; for (IfishCameraModel *model in oldCameraArr ) { [idArr addObject:model.cameraId]; if (model.cameraId == cameraId) { camer = model; [self connectNormalView]; [self.view makeToast:@"已经绑定过了"]; return; } } UserModel*model=[[DataCenter defaultDtacenter]valueForKey:@"UserLogIn"]; [AFNOHeaderHttpTool bindCameraWith:cameraId userId:model.userId success:^(id response) { NSDictionary*resultDic=[NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableContainers error:nil]; NSLog(@"%@",resultDic[@"result"]); if ([resultDic[@"result"] isEqualToString:@"100"]) { self.lodviewMissStyle =lodingViewdissMissSuccsess; //绑定成功之后,直接跳转详情页面 /** 存储摄像头设备信息 */ NSMutableArray *newCamerArr = [[NSMutableArray alloc] initWithArray:oldCameraArr]; NSDictionary * cameraDic=resultDic[@"data"]; NSString *newPassword = GIWEI_INITPASS; NSString *cameraPass = [Utils GetTreatedPassword:newPassword]; IfishCameraModel *camera=[[IfishCameraModel alloc] init]; camera.cameraId = cameraDic[@"cameraId"]; camera.isMaster = cameraDic[@"isMaster"]; camera.showName = cameraDic[@"showName"]; camera.cameraPass = cameraPass; camera.isActive = cameraDic[@"isActive"]; camera.isLook = cameraDic[@"isLook"]; camera.isLive = cameraDic[@"isLive"]; [newCamerArr insertObject:camera atIndex:0]; //存储摄像头数组 [[DataCenter defaultDtacenter]setValue: newCamerArr forKey:@"cameraArr"]; NSUserDefaults*userdefult=[NSUserDefaults standardUserDefaults]; NSInteger index=0; [userdefult setObject:nil forKey:@"lastIndex"]; [userdefult setInteger:index forKey:@"cameralastIndex"]; [userdefult synchronize]; [self setWindowRootWith:camera]; }else{ //lodingViewdissMissSuccsess 只做移除loding效果 self.lodviewMissStyle =lodingViewdissMissSuccsess; [self showFailResultViewWithMsg:@"绑定失败错误码101"]; [self.view makeToast:@"绑定失败错误码101"]; } } failure:^(NSError *err) { [self showFailResultViewWithMsg:err.description]; [self.view makeToast:@"绑定失败未知错误"]; }]; } //绑定成功之后,重新获取用户信息 -(void)setWindowRootWith:(IfishCameraModel *)cameraMdel{ [self.view makeToast:@"添加成功"]; [self getMoreUserData:cameraMdel]; } //获取个人信息 -(void)getMoreUserData:(IfishCameraModel *)cameraMdel{ NSString *userId = [dataContorl dataControlGetUserIdInfo]; [AFHttpTool getMoreUserDataWith:userId success:^(id response) { NSDictionary *reDic=[NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableContainers error:nil]; NSString *result=reDic[@"result"]; if ([result isEqualToString:@"100"]) { NSDictionary *dataDic = reDic[@"data"]; //设备信息 NSArray*deviceArray=dataDic[@"device"]; NSArray*cameraA=dataDic[@"camera"]; NSMutableArray *deviceArr = [[NSMutableArray alloc] init]; if ([deviceArray count]!=0) { for (NSDictionary*deviceDic in deviceArray) { DeviceModel*devicemodel=[[DeviceModel alloc] initWithDict:deviceDic]; [deviceArr insertObject:devicemodel atIndex:0]; } } [[DataCenter defaultDtacenter]setValue:deviceArr forKey:@"deviceInfo"]; //存储摄像头设备信息 NSMutableArray *camras = [[NSMutableArray alloc] init]; if (cameraA .count !=0) { if ([cameraA count]!=0) { for (NSDictionary * cameraDic in cameraA) { IfishCameraModel *camera=[[IfishCameraModel alloc] initWithDict:cameraDic]; [camras insertObject:camera atIndex:0]; } } } //存储摄像头数组 [[DataCenter defaultDtacenter]setValue:camras forKey:@"cameraArr"]; /** * 设备摄像头关系数组 */ NSArray*deviceCamera=dataDic[@"deviceCamera"]; NSMutableArray *devicamerArr=[[NSMutableArray alloc] init]; if (deviceCamera) { for (NSDictionary * deviceCameraDic in deviceCamera) { DeviceCameraModel *dcmodel=[[DeviceCameraModel alloc] init]; dcmodel.deviceId = deviceCameraDic[@"deviceId"]; dcmodel.cameraId = deviceCameraDic[@"cameraId"]; [devicamerArr addObject:dcmodel]; } } //存储摄像头设备关系数组 [[DataCenter defaultDtacenter]setValue:devicamerArr forKey:@"devicamerArr"]; //添加设备之后,先断开device连接,之后进入摄像头页面再重新添加链接 [[GWP2PClient sharedClient] disconnect]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ IfishP2PMonitorController *monitorVC=[[IfishP2PMonitorController alloc] init]; monitorVC.contact = cameraMdel; UINavigationController *nav=[[UINavigationController alloc] initWithRootViewController:monitorVC]; UIApplication*app=[UIApplication sharedApplication]; AppDelegate*app1=(AppDelegate*)app.delegate; app1.window.rootViewController=nav; //绑定成功 加 经验值 [[IfishUserObsever sharedInstance] xinZengJingYanZhi:IFISHADDEXP_BIDCAMERA addType:IFISHADDEXPTYPE1]; }); } } failure:^(NSError *err) { }]; } #pragma mark 绑定设备 -(void)bindDeviceWithSsid:(NSString*)bssid{ NSLog(@"设备bssid_%@",bssid); NSLog(@"设备bssid_%@",bssid); if (self.isBindingDevice) { return; } else { self.isBindingDevice = YES; [self connectNotNormalView]; if (self.bindTimer) { [self.bindTimer invalidate]; self.bindTimer = nil; } } self.HUD.labelText = @"正在绑定设备"; NSString *userId = [dataContorl dataControlGetUserIdInfo]; NSString*url=[NSString stringWithFormat:@"%@%@",kBindDevice,userId]; NSMutableDictionary*bind=[[NSMutableDictionary alloc]initWithDictionary:@{@"macAddress":bssid}]; NSString* timestamp=[NSString stringWithFormat:@"%lld",[[NSDate date] timeIntervalSince1970]*1000]; NSString*token=[MyMD5 md5:[NSString stringWithFormat:@"%@%@ifish8",userId,timestamp]]; if (self.deviceType==DEVICEPETS) { url=[NSString stringWithFormat:@"%@",[NSString stringWithFormat:@"%@/api/user/bindPetDevice.do",JIEKOUPORT]]; bind[@"token"]=token; bind[@"timestamp"]=timestamp; bind[@"storeName"]=self.storeName.length?self.storeName:@"宠物店"; bind[@"userId"]=userId; } [AFHttpTool requestWihtMethod:RequestMethodTypePost url:url params:bind success:^(id response) { NSDictionary*resultDic=[NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableContainers error:nil]; NSLog(@"data:%@",resultDic[@"data"]); self.isBindingDevice = NO; self.deviceBssid = nil; if ([resultDic[@"result"] isEqualToString:@"100"]) { // 保存设备信息 NSDictionary*dataDic=resultDic[@"data"]; DeviceModel*devicemodel=[[DeviceModel alloc] initWithDict:dataDic]; if (!devicemodel.type){ self.lodviewMissStyle=lodingViewdissMissSuccsess; [self mmPogressHUDdismiss]; [self connectNormalView]; [self.view makeToast:@"用户绑定设备成功,但设备初次入网失败请重新登陆"]; [self initMacIdString:bssid]; }else{ self.lodviewMissStyle=lodingViewdissMissSuccsess; [self mmPogressHUDdismiss]; [self connectNormalView]; if (_maclabel) { [_maclabel removeFromSuperview]; } _deviceArry=[[DataCenter defaultDtacenter]valueForKey:@"deviceInfo"]; [_deviceArry insertObject:devicemodel atIndex:0]; [[DataCenter defaultDtacenter]setValue:_deviceArry forKey:@"deviceInfo"]; if ([devicemodel.type isEqual:[NSNull null]]){ //进入此循环 可能因为设备所在服务器 不在 本程序所在 服务器 [self mmPogressHUDdismiss]; [self connectNormalView]; [self showTitle:@"" messsage:@"设备不在服务器"]; }else{ if (isfromCameraView) { self.lodviewMissStyle=lodingViewdissMissSuccsess; [self mmPogressHUDdismiss]; [self connectNormalView]; //此入口设备 是已授权 且非黑名单 [self setWindowRoot]; }else{ [[IfishDataUnity shareDataInstance] initAppCenterVcWith:devicemodel addWithdissMisVc:nil]; //绑定成功 加 经验值 [[IfishUserObsever sharedInstance] xinZengJingYanZhi:IFISHADDEXP_BIDDEVICE addType:IFISHADDEXPTYPE1]; } } } }else if ([resultDic[@"result"] isEqualToString:@"101"]){ NSString*msg= resultDic[@"data"]; if ([msg isKindOfClass:[NSString class]]&&msg.length&&![msg isEqualToString:@"null"]) { } else { msg=@"绑定失败"; } [self.view makeToast:msg]; self.bakbutton.userInteractionEnabled=YES; NSString *str =[NSString stringWithFormat:@"mac%@错误码101",bssid]; [self initMacIdString:str]; }else if ([resultDic[@"result"] isEqualToString:@"301"]){ [self.view makeToast:@"请求验证失败,请重新登录"]; self.bakbutton.userInteractionEnabled=YES; NSString *str =[NSString stringWithFormat:@"mac%@错误吗301",bssid]; [self initMacIdString:str]; }else if ([resultDic[@"result"] isEqualToString:@"302"]){ // 请求被舍弃未执行 self.bakbutton.userInteractionEnabled=YES; NSString *str =[NSString stringWithFormat:@"mac%@错误吗302",bssid]; [self initMacIdString:str]; } } failure:^(NSError *err) { self.isBindingDevice=NO; if (self.retryTimes < 10) { dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ self.HUD.labelText = @"自动重连..."; [self bindDeviceWithSsid:self.deviceBssid]; self.retryTimes += 1; }); } else { self.tap.enabled=YES; self.isBindingDevice = NO; self.HUD.labelText = err.localizedDescription; [self.HUD hide:YES afterDelay:2]; [self initMacIdString:err.description]; [self appendTrakContent:[NSString stringWithFormat:@"绑定网络请求错误:%@", err.localizedDescription]]; self.bakbutton.userInteractionEnabled=YES; } }]; } -(void)bindDeviceSus{ } -(void)setRootViewBindFromCameraView{ } -(void)wifiviewkeyboardWillHide:(NSNotification *)notify{ // 键盘动画时间 double duration = [[notify.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue]; //视图下沉恢复原状 [UIView animateWithDuration:duration animations:^{ self.view.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height); }]; } -(BOOL)textFieldShouldBeginEditing:(UITextField *)textField { return YES; } -(void)wifiviewkeyboradWillShow:(NSNotification*)notification{ CGRect keyboardFrame = [notification.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue]; CGRect buttonRect = [self.connectBtn convertRect:self.connectBtn.bounds toView:self.view]; CGFloat buttonMargin =(buttonRect.origin.y + buttonRect.size.height + 10); CGFloat transformY = keyboardFrame.origin.y - buttonMargin; // 取得键盘的动画时间,这样可以在视图上移的时候更连贯 double duration = [[notification.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue]; [UIView animateWithDuration:duration animations:^{ if (keyboardFrame.origin.y < self.view.frame.size.height) { self.view.transform = CGAffineTransformMakeTranslation(0,transformY); }else{ self.view.transform = CGAffineTransformMakeTranslation(0, 0); } }]; } -(BOOL)textFieldShouldReturn:(UITextField *)textField{ [textField resignFirstResponder]; return YES; } -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ [self hiddenKeybord]; } -(void)hiddenKeybord{ // [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(wifiviewkeyboardWillHide:) name:UIKeyboardWillChangeFrameNotification object:nil]; [self.wifiTextFiled resignFirstResponder]; } -(void)setWindowRoot{ Socketsingleton *soket=[Socketsingleton sharedInstance]; if (soket.clientSocket.isConnected) { [soket cutOffSocket]; } [self setAppTabRoot]; } -(void)setAppTabRoot{ IfishMianTabViewController *mianVC=[[IfishMianTabViewController alloc] init]; UIApplication*app=[UIApplication sharedApplication]; AppDelegate*app1=(AppDelegate*)app.delegate; app1.window.rootViewController=mianVC; [[UIApplication sharedApplication].keyWindow.rootViewController.view makeToast:@"绑定成功"]; //绑定成功 加 经验值 [[IfishUserObsever sharedInstance] xinZengJingYanZhi:IFISHADDEXP_BIDDEVICE addType:IFISHADDEXPTYPE1]; } -(void)rightButtonClickItem:(UIBarButtonItem *)sender{ ConnectErrorViewController*error=[[ConnectErrorViewController alloc]init]; [self.navigationController pushViewController:error animated:YES]; self.navigationController.navigationBarHidden=NO; } @end