网关搜索/添加
## 设备添加
### 一、 发现设备
添加路由器/绑定路由器前,需要先连接路由器Wi-Fi搜索设备。
* 引入头文件`#import <H3CMagicKit/H3CGatewaySearcher.h>`
#### 1.1 发起搜索
使用单例`H3CGatewaySearcher`监听本地局域网内H3C网关,需要先添加监听者,后发起网关搜索。
```
[MHToast showProgressHUD];
[[H3CGatewaySearcher shareSearcher] addGatewayListCompleteObserverWithKey:NSStringFromClass([self class]) complete:^(NSMutableArray * _Nonnull gatewayList) {
[MHToast hiddenProgressHUD];
self.gatewayList = gatewayList;
[self.tableView reloadData];
}];
[[H3CGatewaySearcher shareSearcher] updateLocalGatewayListWithMaxTime:2 isNeedRefresh:YES];
```
#### 1.2 移除监听对象
不需要监听本地网关后,移除监听对象
```
- (void)dealloc {
[[H3CGatewaySearcher shareSearcher] removeGatewayListCompleteObserverWithKey:NSStringFromClass([self class])];
}
```
### 二、 绑定网关
绑定网关,建用户与网关的关系,以便远程控制网关。
2.1 检测设备是否支持魔术家SDK控制
* 导入`#import <H3CMagicKit/DeviceUtil.h>`
* 使用工具类`DeviceUtil`过滤不支持的设备
2.2 调用绑定接口
* 导入`#import <H3CMagicKit/H3CGatewayObject.h>`
```
[MHToast showProgressHUD];
[H3CGatewayObject bindGatewayWithGatewayIp:gatewayModel.gwLanIp adminPassword:password gwSn:gatewayModel.gwSn gwName:gatewayModel.gwName gwVersion:gatewayModel.gwVersion gwModel:gatewayModel completeHandler:^(H3CGatewayModel * _Nullable bindGatewayModel, MKManageGatewayState bindState, H3CError * _Nullable bindError) {
[MHToast hiddenProgressHUD];
if (bindState == MKManageGatewayStateSuccess || bindState == MKManageGatewayBindFailure) {
if (bindState == MKManageGatewayStateSuccess) {
[MHToast showToastHUD:@"绑定成功"];
}
else {
[MHToast showToastHUD:[NSString stringWithFormat:@"%@", bindError.errorDesc]];
}
[self.navigationController popToRootViewControllerAnimated:YES];
[self dismissViewControllerAnimated:YES completion:nil];
}
else if (bindState == MKManageGatewayStateFailure) {
[MHToast showToastHUD:[NSString stringWithFormat:@"%@", bindError.errorDesc]];
}
else if (bindState == MKManageGatewayStateConfig) {
[self configRouter:gatewayModel];
}
}];
```
* 若绑定设备需要从网关获取管理密码的提示语,可以调用下面接口
```
[MHToast showProgressHUD];
[H3CGatewayObject getInfoBeforeLoginWithGwSn:gatewayModel.gwSn ip:gatewayModel.ip success:^(H3CPasswordFlagModel * _Nonnull flagModel) {
[MHToast hiddenProgressHUD];
[self showAdminPasswordAlertView:flagModel gwModel:gatewayModel];
} failure:^(H3CError *error) {
[MHToast hiddenProgressHUD];
// 出厂配置
if (error.retCode == 38 || error.retCode == 40) {
[self configRouter:gatewayModel];
}
else {
[MHToast showToastHUD:error.errorDesc];
}
}];
```
>w 1、绑定过程中,若发现设备还未配置,则需要去配置;
2、调用接口返回错误码38,40,表示设备也是出厂配置中。