921 lines
34 KiB
Plaintext
921 lines
34 KiB
Plaintext
//
|
||
// YooseeNextConnectViewController.m
|
||
// IfihYooeeDemo
|
||
//
|
||
// Created by imac on 16/5/31.
|
||
// Copyright © 2016年 xiang. All rights reserved.
|
||
//
|
||
|
||
#import "YooseeNextConnectViewController.h"
|
||
#import "WaitingPageView.h"
|
||
#define WAITING_CONTENT_VIEW_HEIGHT 300
|
||
#define NAVIGATION_BAR_HEIGHT ([[[UIDevice currentDevice] systemVersion] floatValue] < 7.0 ? (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? 44:44):(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? 64:64))
|
||
#import <SystemConfiguration/CaptiveNetwork.h>
|
||
#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 <GWP2P/GWP2P.h>
|
||
#import "MyMD5.h"
|
||
#import "IfishUserDataUnity.h"
|
||
#import "DeviceCameraModel.h"
|
||
typedef NS_ENUM(NSInteger,lodingViewdissMissStyle) {
|
||
lodingViewdissMissSuccsess=0,// default is 0
|
||
lodingViewdissMissfail,
|
||
lodingViewdissMissAlreadyBinded
|
||
};
|
||
|
||
@interface YooseeNextConnectViewController ()<UITextFieldDelegate,UIAlertViewDelegate,GWPP2PDeviceLinkerProtocol>
|
||
{
|
||
void *_context;
|
||
}
|
||
|
||
@property (strong,nonatomic) NSMutableDictionary *addresses;
|
||
@property (strong,nonatomic) NSMutableDictionary *linkDict;
|
||
@property (nonatomic,strong) UIButton *sBtn;
|
||
@property(nonatomic)BOOL autodismiss;
|
||
@property(nonatomic,assign)lodingViewdissMissStyle lodviewMissStyle;
|
||
@property(nonatomic,retain) NSTimer* getInfTimer ;
|
||
|
||
@property(nonatomic,strong) UILabel *wifilabel;
|
||
|
||
@property(nonatomic,strong) UIImageView *nodImg;
|
||
@property(nonatomic,strong) LXWaveProgressView *waveProgressView;;
|
||
@property(nonatomic,strong) IfishConnectingView *connectingView;
|
||
|
||
@property (copy, nonatomic) NSString *deviceID;//设备id
|
||
@property (assign, nonatomic) BOOL isDeviceLinkIn;//是否已经连接智能设备
|
||
|
||
@end
|
||
|
||
@implementation YooseeNextConnectViewController
|
||
|
||
- (void)viewDidLoad {
|
||
[super viewDidLoad];
|
||
//智能联机
|
||
self.isDeviceLinkIn = NO;
|
||
[GWP2PDeviceLinker shareInstance].delegate=self;
|
||
self.deviceID=nil;
|
||
//[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(viewWillEnterForeground:) name:Noti_WillEnterForeground object:nil];
|
||
self.addresses = [[NSMutableDictionary alloc] initWithCapacity:1];
|
||
self.linkDict = [[NSMutableDictionary alloc] initWithCapacity:1];
|
||
self.view.backgroundColor = [UIColor whiteColor];
|
||
[self addTitleViewWithTitle:@"连接摄像头"];
|
||
[self initComponent];
|
||
UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];
|
||
self.navigationItem.backBarButtonItem = item;
|
||
_canDissMissController = YES;
|
||
//添加警告内容
|
||
[self redTipLable];
|
||
// [self tipsLabelAndButton];
|
||
|
||
if (self.conectType==conectType_ap&&self.wifiPwd.length&&self.wifiPwd.length)
|
||
{
|
||
[self connectNotNormalView];
|
||
_canDissMissController = NO;
|
||
[self apLinkConnect];
|
||
}
|
||
}
|
||
|
||
-(UILabel *)redTipLable{
|
||
if (_redTipLable==nil) {
|
||
CGFloat y = CGRectGetMaxY(self.wifiSecFiled.frame) + 5;
|
||
_redTipLable=[[UILabel alloc]initWithFrame:CGRectMake(19, y, 100, 10)];
|
||
_redTipLable.text=@"(暂不支持5G网络,请使用2.4G网络)";
|
||
_redTipLable.font=[UIFont systemFontOfSize:13];
|
||
_redTipLable.textColor=[UIColor redColor];
|
||
[_redTipLable sizeToFit];
|
||
[self.view addSubview:_redTipLable];
|
||
[self.view bringSubviewToFront:_redTipLable];
|
||
}
|
||
return _redTipLable;
|
||
}
|
||
-(void)tipsLabelAndButton
|
||
{
|
||
CGFloat y = CGRectGetMaxY(self.redTipLable.frame) + 5;
|
||
UILabel* tipLable=[[UILabel alloc]initWithFrame:CGRectMake(19, y, 100, 10)];
|
||
tipLable.text=@"(如有问题,请尝试热点连接模式)";
|
||
tipLable.font=[UIFont systemFontOfSize:13];
|
||
tipLable.textColor=[UIColor lightGrayColor];
|
||
[tipLable sizeToFit];
|
||
[self.view addSubview:tipLable];
|
||
[self.view bringSubviewToFront:tipLable];
|
||
|
||
UIButton*button=[UIButton buttonWithType:UIButtonTypeCustom];
|
||
button.frame=CGRectMake(CGRectGetMaxX(tipLable.frame), CGRectGetMinY(tipLable.frame), 60, 10);
|
||
button.titleLabel.font=[UIFont systemFontOfSize:13];
|
||
[button setTitle:@"点击这里" forState:UIControlStateNormal];
|
||
[button setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
|
||
[button addTarget:self action:@selector(goAPmode) forControlEvents:UIControlEventTouchUpInside];
|
||
[self.view addSubview:button];
|
||
|
||
}
|
||
//获取WiFi信息
|
||
- (id)fetchSSIDInfo
|
||
{
|
||
NSArray *ifs = (id)CFBridgingRelease(CNCopySupportedInterfaces());
|
||
NSLog(@"%s: Supported interfaces: %@", __func__, ifs);
|
||
id info = nil;
|
||
for (NSString *ifnam in ifs) {
|
||
info = (id)CFBridgingRelease(CNCopyCurrentNetworkInfo((CFStringRef)ifnam));
|
||
if (info && [info count]) {
|
||
break;
|
||
}
|
||
|
||
}
|
||
|
||
return info ;
|
||
}
|
||
|
||
-(void)viewWillDisappear:(BOOL)animated{
|
||
[super viewWillDisappear:animated];
|
||
[[NSNotificationCenter defaultCenter] removeObserver:self name:UITextFieldTextDidChangeNotification object:self.wifiSecFiled];
|
||
|
||
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];
|
||
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];
|
||
|
||
[[GWP2PDeviceLinker shareInstance] p2pStopSmartLink];
|
||
}
|
||
|
||
-(void)viewWillAppear:(BOOL)animated{
|
||
[super viewWillAppear:animated];
|
||
}
|
||
-(void)viewDidAppear:(BOOL)animated{
|
||
[super viewDidAppear:animated];
|
||
|
||
}
|
||
- (void)didReceiveMemoryWarning {
|
||
[super didReceiveMemoryWarning];
|
||
// Dispose of any resources that can be recreated.
|
||
}
|
||
-(void)initComponent{
|
||
//967/1018/ 0.95
|
||
|
||
CGFloat percentHbiW = 0.117 ;//5s 35/300
|
||
CGFloat y = 20;
|
||
self.nodImg= [[UIImageView alloc] initWithFrame:CGRectMake(5, y,12, 12)];
|
||
self.nodImg.image = [UIImage imageNamed:@"linkingdevice_point"];
|
||
[self.view addSubview:self.nodImg];
|
||
|
||
|
||
self.wifilabel=[[UILabel alloc] init];
|
||
NSDictionary *ifs = [self fetchSSIDInfo];
|
||
if (!self.wifiName.length)
|
||
{
|
||
self.wifiName = [ifs objectForKey:@"SSID"];
|
||
}
|
||
|
||
|
||
self.wifilabel.text = [NSString stringWithFormat:@"请输入当前WiFi:%@密码",self.wifiName];
|
||
self.wifilabel.textAlignment = NSTextAlignmentLeft;
|
||
|
||
self.wifilabel.textColor = [UIColor colorWithRed:153.0/255.0 green:153.0/255.0 blue:153.0/255.0 alpha:1];
|
||
NSMutableAttributedString * attributedString = [[NSMutableAttributedString alloc] initWithString:self.wifilabel.text];
|
||
NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle alloc] init];
|
||
[paragraphStyle setLineSpacing:8];
|
||
[attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [self.wifilabel.text length])];
|
||
[attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor colorWithRed:0 green:170.0/255.0 blue:218.0/255.0 alpha:1] range:NSMakeRange(10,self.wifiName.length)];
|
||
[self.wifilabel setAttributedText:attributedString];
|
||
[self.wifilabel sizeToFit];
|
||
|
||
CGFloat labelSizeW = [self widthForString:self.wifilabel.text fontSize:18 andHeight:10];
|
||
CGFloat labelH= [self heightForString:self.wifilabel.text fontSize:18 andWidth:labelSizeW];
|
||
|
||
self.wifilabel.frame = CGRectMake(CGRectGetMaxX(self.nodImg.frame), y, labelSizeW, labelH);
|
||
|
||
[self.view addSubview:self.wifilabel];
|
||
//wifi 输入框
|
||
CGFloat wifiFileW=kScreenSize.width - 2*10;
|
||
CGFloat wifiFileH=wifiFileW*percentHbiW;
|
||
|
||
self.wifiSecFiled=[[UITextField alloc] initWithFrame:CGRectMake(10,CGRectGetMaxY(self.wifilabel.frame) + 10, wifiFileW, wifiFileH)];
|
||
|
||
self.wifiSecFiled.placeholder = @"请输入WiFi密码";
|
||
self.wifiSecFiled.delegate=self;
|
||
self.wifiSecFiled.keyboardType=UIKeyboardTypeAlphabet;
|
||
self.wifiSecFiled.layer.masksToBounds=YES;
|
||
self.wifiSecFiled.layer.cornerRadius=5;
|
||
if (@available(iOS 13.0, *)){//iOS13之后,设置颜色的方便变更
|
||
|
||
}else{
|
||
[self.wifiSecFiled setValue:[UIColor colorWithRed:153.0/255.0 green:153.0/255.0 blue:153.0/255.0 alpha:1] forKeyPath:@"_placeholderLabel.textColor"];
|
||
}
|
||
self.wifiSecFiled.borderStyle = UITextBorderStyleNone;
|
||
self.wifiSecFiled.backgroundColor = [UIColor colorWithRed:244.0/255.0 green:244.0/255.0 blue:244.0/255.0 alpha:1];
|
||
NSUserDefaults*userDefsult=[NSUserDefaults standardUserDefaults];
|
||
NSString*pass=[userDefsult objectForKey:@"wifiPass"];
|
||
|
||
if (pass) {
|
||
self.wifiSecFiled.text = pass;
|
||
}
|
||
self.wifiSecFiled.textAlignment = NSTextAlignmentLeft;
|
||
|
||
[self.view addSubview:self.wifiSecFiled];
|
||
|
||
//占位view 让输入框文字 偏移 也有别的方法 contentoffset
|
||
UIView*phoneView=[[UIView alloc]initWithFrame:CGRectMake(0,0, 9, 10)];
|
||
self.wifiSecFiled.leftView=phoneView;
|
||
self.wifiSecFiled.leftViewMode=UITextFieldViewModeAlways;
|
||
|
||
CGFloat btnW=100;
|
||
//输入框内白色2像素view
|
||
UIView *whiteView=[[UIView alloc] initWithFrame:CGRectMake(wifiFileW - btnW -2, 0, 2, wifiFileH)];
|
||
whiteView.backgroundColor = [UIColor whiteColor];
|
||
|
||
[self.wifiSecFiled addSubview:whiteView];
|
||
|
||
|
||
self.sBtn=[UIButton buttonWithType:UIButtonTypeCustom];
|
||
[self.sBtn setTitle:@"确定" forState:UIControlStateNormal];
|
||
|
||
self.sBtn.frame = CGRectMake(wifiFileW - btnW,0, btnW,wifiFileH);
|
||
|
||
[self.sBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
|
||
[self.sBtn addTarget:self action:@selector(sBtn:) forControlEvents:UIControlEventTouchUpInside];
|
||
//self.sBtn.backgroundColor = COLOR_LABEL_TITLE;
|
||
[self.sBtn setBackgroundImage:[UIImage imageNamed:@"linkingdevice_botton"] forState:UIControlStateNormal];
|
||
[self.wifiSecFiled addSubview:self.sBtn];
|
||
|
||
//底部背景
|
||
UIImageView *backImg=[[UIImageView alloc] initWithFrame:CGRectMake(0,kScreenSize.height - kScreenSize.width * 1.1,kScreenSize.width,kScreenSize.width * 1.1)];
|
||
backImg.image = [UIImage imageNamed:@"linkingdevice_setting"];
|
||
backImg.userInteractionEnabled = YES;
|
||
|
||
[self.view addSubview:backImg];
|
||
|
||
|
||
//波纹
|
||
self.waveProgressView = [[LXWaveProgressView alloc] initWithFrame:CGRectMake(0, CGRectGetMaxY(self.wifiSecFiled.frame) +10, kScreenSize.width,CGRectGetMinY(backImg.frame) - CGRectGetMaxY(self.wifiSecFiled.frame))];
|
||
|
||
self.attentionLabel=[[UILabel alloc]initWithFrame:CGRectMake(30, CGRectGetMidY(self.waveProgressView.frame), kScreenWidth-60, 130)];
|
||
self.attentionLabel.font=[UIFont systemFontOfSize:13];
|
||
self.attentionLabel.textColor=[UIColor blackColor];
|
||
self.attentionLabel.numberOfLines=0;
|
||
self.attentionLabel.text=@"1、请长按摄像头背后复位孔,复位摄像头。\n2、若Wifi名称有中文,请改成英文字母加数字。\n3、Wifi密码不能包含特殊符号(如‘“等)。\n4、若多次智能连接未成功,请尝试热点模式连接。";
|
||
[self.view addSubview:self.waveProgressView];
|
||
[self.view bringSubviewToFront:self.waveProgressView];
|
||
[self.view addSubview:self.attentionLabel];
|
||
|
||
|
||
|
||
//说明书
|
||
UIButton *shuimingshuBtn=[UIButton buttonWithType:UIButtonTypeCustom];
|
||
shuimingshuBtn.frame = CGRectMake(0,kScreenSize.height - 44 - 200, kScreenSize.width*1/3, 200);
|
||
[shuimingshuBtn addTarget:self action:@selector(ChaKanShuimingShu) forControlEvents:UIControlEventTouchUpInside];
|
||
//[shuimingshuBtn setBackgroundColor:[UIColor redColor]];
|
||
[self.view addSubview:shuimingshuBtn];
|
||
|
||
//设置输入状态UI
|
||
[self connectNormalView];
|
||
|
||
|
||
}
|
||
|
||
#pragma mark - ChaKanShuimingShu
|
||
|
||
-(void)ChaKanShuimingShu{
|
||
|
||
if (!_canDissMissController ) {
|
||
|
||
[self.view makeToast:@"正在连接中请稍后操作"];
|
||
return;
|
||
|
||
}
|
||
|
||
PushMasssageWebViewController*webVC=[[PushMasssageWebViewController alloc]init];
|
||
webVC.pushlink =IFISH_DEVCEITROURL;
|
||
webVC.pushtitle = NSLocalizedString(@"ifish_deviceuse", nil);;
|
||
|
||
[self.navigationController pushViewController:webVC animated:YES];
|
||
|
||
}
|
||
|
||
|
||
#pragma mark- 点击确定
|
||
-(void)goAPmode
|
||
{
|
||
ConAquarNowWiFiPwdVC *vc = InitObject(ConAquarNowWiFiPwdVC);
|
||
vc.deviceType=DEVICECAMERA;
|
||
NSDictionary *netInfo = [CommonUtils getSSIDInfo];
|
||
vc.ssid = [netInfo objectForKey:@"SSID"];
|
||
vc.bssid = [netInfo objectForKey:@"BSSID"];
|
||
|
||
|
||
[self.navigationController pushViewController:vc animated:YES];
|
||
}
|
||
-(void)sBtn:(UIButton*)btn{
|
||
NSString *ssidName =@"";
|
||
if (self.wifiName.length>2) {
|
||
ssidName= [self.wifiName substringWithRange:NSMakeRange(self.wifiName.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;
|
||
}
|
||
if ([self.wifiName.uppercaseString isEqualToString:@"WLAN"]) {
|
||
UIAlertView *alert= [[UIAlertView alloc] initWithTitle:@"" message:@"获取到的WiFi无效" delegate:nil cancelButtonTitle:@"重试" otherButtonTitles:nil, nil];
|
||
alert.tag=3;
|
||
[alert show];
|
||
return;
|
||
}
|
||
BOOL isRight =[dataContorl isIncludeSpecialCharact:self.wifiSecFiled.text];
|
||
|
||
if (!isRight) {
|
||
[self.view makeToast:@"您输入的密码带特殊符号,请更改路由器密码。"];
|
||
return;
|
||
}
|
||
UIAlertView *alert= [[UIAlertView alloc] initWithTitle:@"提示" message:@"即将使用声波连接,请调大手机音量,并靠近设备,确认设备已经重置(按复位小孔,听到“等待连接“或者“滴”)后再点击确认" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确认", nil];
|
||
alert.tag = ALERT_TAG_B_SURE;
|
||
|
||
[alert show];
|
||
|
||
|
||
}
|
||
-(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];
|
||
}
|
||
|
||
|
||
//保存wifi密码
|
||
-(void)savePassw{
|
||
NSUserDefaults*userdefult=[NSUserDefaults standardUserDefaults];
|
||
|
||
[userdefult setObject:self.wifiSecFiled.text forKey:@"wifiPass"];
|
||
[userdefult synchronize];
|
||
}
|
||
|
||
#pragma -mark -functions
|
||
|
||
//获取字符串的宽度
|
||
-(float) widthForString:(NSString *)value fontSize:(float)fontSize andHeight:(float)height
|
||
{
|
||
CGSize sizeToFit = [value sizeWithFont:[UIFont systemFontOfSize:fontSize] constrainedToSize:CGSizeMake(CGFLOAT_MAX, height) lineBreakMode:NSLineBreakByWordWrapping];//此处的换行类型(lineBreakMode)可根据自己的实际情况进行设置
|
||
return sizeToFit.width;
|
||
}
|
||
//获得字符串的高度
|
||
-(float) heightForString:(NSString *)value fontSize:(float)fontSize andWidth:(float)width
|
||
{
|
||
CGSize sizeToFit = [value sizeWithFont:[UIFont systemFontOfSize:fontSize] constrainedToSize:CGSizeMake(width, CGFLOAT_MAX) lineBreakMode:NSLineBreakByCharWrapping];//此处的换行类型(lineBreakMode)可根据自己的实际情况进行设置
|
||
return sizeToFit.height;
|
||
}
|
||
//密码
|
||
-(void)resetPassWord{
|
||
|
||
NSString *newPassword = GIWEI_INITPASS;
|
||
self.lastSetPassword = [Utils GetTreatedPassword:newPassword];
|
||
}
|
||
#pragma mark---到前台,搜索设备
|
||
//-(void)viewWillEnterForeground:(NSNotification *)noti{
|
||
//
|
||
// if (self.deviceID.length&&!self.isDeviceLinkIn)
|
||
// {
|
||
// [GWP2PDeviceLinker shareInstance].delegate=self;
|
||
// [[GWP2PDeviceLinker shareInstance] forceScanLanDevices];
|
||
// }
|
||
//}
|
||
|
||
#pragma mark - 搜索到设备,弹出添加设备提示 暂不用
|
||
/**
|
||
局域网里面有设备联网成功后,都会回调此方法。UDP使用
|
||
|
||
@param deviceDict 设备信息
|
||
*/
|
||
- (void)p2pDeviceLinker:(GWP2PDeviceLinker *)linker deviceLinkSuccess:(NSDictionary *)deviceDict
|
||
{
|
||
NSLog(@"扫描到设备");
|
||
[self deviceLinkin:deviceDict linkType:self.conectType];
|
||
}
|
||
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
|
||
|
||
|
||
if (alertView.tag==ALERT_TAG_SET_FAILED) {
|
||
|
||
if(buttonIndex==0){
|
||
|
||
}
|
||
}else if (alertView.tag==ALERT_TAG_B_SURE){
|
||
|
||
if (buttonIndex ==1) {
|
||
|
||
[self.wifiSecFiled resignFirstResponder];
|
||
|
||
if (self.wifiSecFiled.text.length<=0||[self.wifiName isEqualToString:@"无Wi-Fi"]) {
|
||
[self.view makeToast:@"请保证手机已连接wifi,且wifi密码不能为空"];
|
||
return;
|
||
}
|
||
|
||
if (!self.wifiName) {
|
||
|
||
[self.view makeToast:@"未检测到wifi"];
|
||
|
||
return;
|
||
}
|
||
self.wifiPwd = self.wifiSecFiled.text;
|
||
//显示连接中效果
|
||
[self connectNotNormalView];
|
||
_canDissMissController = NO;
|
||
[self savePassw];
|
||
//声波智能联机
|
||
if (self.conectType==conectType_Intelligent)
|
||
{
|
||
[self smartLinkConnect];
|
||
}
|
||
else
|
||
{
|
||
[self apLinkConnect];
|
||
}
|
||
|
||
}
|
||
}//重试wifi
|
||
else if (alertView.tag==3){
|
||
|
||
[self initComponent];
|
||
}
|
||
}
|
||
|
||
-(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<NSString *,id> *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秒之后还未连接上,连接超时
|
||
[[GWP2PDeviceLinker shareInstance] p2pStopSmartLink];
|
||
[[GWP2PDeviceLinker shareInstance] p2pStopAPLink];
|
||
[self connectNormalView];
|
||
if ([[[CommonUtils getSSIDInfo] objectForKey:@"SSID"] isEqualToString:self.wifiName])
|
||
{
|
||
[self.view makeToast:[NSString stringWithFormat:@"请确认手机已经连接到%@",self.wifiName]];
|
||
}
|
||
else
|
||
{
|
||
[self.view makeToast:@"WiFi连接失败"];
|
||
}
|
||
|
||
}
|
||
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.conectType];
|
||
});
|
||
|
||
[self resetPassWord];//初始化密码
|
||
[[GWP2PDeviceLinker shareInstance] p2pAPLinkDeviceWithWiFiSSID:weakSelf.wifiName wifiPassword:weakSelf.wifiPwd devicePassword:weakSelf.lastSetPassword deviceReceive:^(NSString *deviceId, BOOL isSupport) {
|
||
|
||
|
||
|
||
if (isSupport)
|
||
{
|
||
|
||
weakSelf.deviceID=deviceId;
|
||
[weakSelf.view makeToast:[NSString stringWithFormat:@"设备即将连接网络,请将手机自动重新连接到%@",weakSelf.wifiName]];
|
||
|
||
|
||
}
|
||
else
|
||
{
|
||
[weakSelf.view makeToast:@"该设备不支持AP配网"];
|
||
}
|
||
|
||
|
||
} deviceLinkIn:^(NSDictionary *deviceDict) {
|
||
|
||
[weakSelf deviceLinkin:deviceDict linkType:weakSelf.conectType];
|
||
}];
|
||
|
||
|
||
}
|
||
//智能联机
|
||
-(void)smartLinkConnect{
|
||
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.conectType];
|
||
});
|
||
[[GWP2PDeviceLinker shareInstance] p2pSmartLinkDeviceWithWiFiSSID:weakSelf.wifiName password:weakSelf.wifiPwd useSimpleConfig:YES deviceLinkIn:^(NSDictionary *deviceDict) {
|
||
[weakSelf deviceLinkin:deviceDict linkType:weakSelf.conectType];
|
||
}];
|
||
}
|
||
//初始化设备密码回调
|
||
-(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];
|
||
|
||
}
|
||
#pragma mark - UI正常状态
|
||
|
||
-(void)connectNormalView
|
||
{
|
||
|
||
if (!self.connectingView) {
|
||
CGFloat yOffset = 0;
|
||
if (is_iPhone_X) {
|
||
yOffset = 88;
|
||
} else {
|
||
yOffset = 64;
|
||
}
|
||
|
||
IfishConnectingView *connectingView=[[IfishConnectingView alloc] initWithFrame:CGRectMake(0,yOffset, kScreenSize.width, CGRectGetMaxY(self.wifiSecFiled.frame))];
|
||
self.connectingView =connectingView;
|
||
|
||
[self.connectingView.textChangeView animationWithTexts:[NSArray arrayWithObjects:@"正在拼命连接中...",@"请将摄像头放在wifi信号良好的位置",@"连接时,请开大手机音量",@"连接过程会持续40s左右,请耐心等待",@"连接不上,请点击下方说明书",nil]];
|
||
|
||
//self.connectingView.backgroundColor = [UIColor redColor];
|
||
|
||
[self.view addSubview:self.connectingView];
|
||
self.wifilabel.hidden = NO;
|
||
self.wifiSecFiled.hidden = NO;
|
||
self.sBtn.hidden = NO;
|
||
self.nodImg.hidden = NO;
|
||
self.redTipLable.hidden=NO;
|
||
|
||
self.connectingView.alpha = 0;
|
||
|
||
}else{
|
||
|
||
[UIView animateWithDuration:2.0 animations:^{
|
||
|
||
self.connectingView.alpha = 0;
|
||
|
||
|
||
} completion:^(BOOL finished) {
|
||
|
||
[self.connectingView.textChangeView stopAnimation];
|
||
self.wifilabel.hidden = NO;
|
||
self.wifiSecFiled.hidden = NO;
|
||
self.sBtn.hidden = NO;
|
||
self.nodImg.hidden = NO;
|
||
self.redTipLable.hidden=NO;
|
||
|
||
}];
|
||
}
|
||
}
|
||
|
||
#pragma mark - UI连接状态
|
||
|
||
-(void)connectNotNormalView{
|
||
|
||
|
||
[UIView animateWithDuration:2.0 animations:^{
|
||
|
||
self.connectingView.alpha = 1;
|
||
self.connectingView.lineView.alpha = 1;
|
||
self.connectingView.fishImageView.alpha = 1;
|
||
|
||
} completion:^(BOOL finished) {
|
||
|
||
[self.connectingView.textChangeView startTextAnimation];
|
||
|
||
|
||
}];
|
||
|
||
self.wifilabel.hidden = YES;
|
||
self.wifiSecFiled.hidden = YES;
|
||
self.sBtn.hidden = YES;
|
||
self.nodImg.hidden = YES;
|
||
self.redTipLable.hidden=YES;
|
||
self.attentionLabel.hidden=YES;
|
||
}
|
||
|
||
-(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.sBtn convertRect:self.sBtn.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<UITouch *> *)touches withEvent:(UIEvent *)event{
|
||
[self hiddenKeybord];
|
||
}
|
||
-(void)hiddenKeybord{
|
||
|
||
[self.wifiSecFiled resignFirstResponder];
|
||
}
|
||
|
||
|
||
#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;
|
||
_canDissMissController = YES;
|
||
//绑定成功之后,直接跳转详情页面
|
||
/**
|
||
存储摄像头设备信息
|
||
*/
|
||
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 connectNormalView];
|
||
_canDissMissController = YES;
|
||
[self.view makeToast:@"绑定失败错误码101"];
|
||
|
||
}
|
||
|
||
} failure:^(NSError *err) {
|
||
|
||
[self connectNormalView];
|
||
[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) {
|
||
}];
|
||
}
|
||
|
||
@end
|