网关控制(详细示例)
## 网关控制
调用网关管中的切换设备接口后,可以获取到设备控制权限,即网关的接入用户列表、游戏Wi-Fi、系统状态、上网设置、网络优化、定时设置等功能接口可以正常调用。
### 一、Wi-Fi设置
* 导入头文件`#import <H3CMagicKit/H3CGatewayObject+WiFiSet.h>`
* 获取Wi-Fi相关信息接口
特别注意以下重要规则:
```
[H3CGatewayObject getWifiNormalInfoWithSuccess:^(H3CWiFiModel * _Nonnull wifiModel) {
self.dualBandFlag = [wifiModel.dualBandFlag intValue]; //是否开启二合一
self.defaultName = wifiModel.defaultName;
self.wifiNameOne = wifiModel.admin.wifiName; // 2.4G名称
self.wifiName5GOrigin = wifiModel.admin.wifiName5G; //5Gwifi名称
self.wifiNameTwo = wifiModel.admin.wifiName5G; //5Gwifi名称
self.wifiPwsOne = wifiModel.admin.wifiNewPassword; //2.4G密码
self.wifiPwsTwo = wifiModel.admin.wifiNewPassword5G; //5Gwifi密码
self.wifiHideStatus = [wifiModel.admin.wifiHideStatus intValue]; //2.4G是否隐藏
self.wifiHideStatus5G = [wifiModel.admin.wifiHideStatus5G intValue]; //5G是否隐藏
self.wifiName = wifiModel.guest.wifiName;
self.wifiName5G = wifiModel.guest.wifiName5G;
[H3CGatewayObject getWifiCtrlInfoWithSuccess:^(H3CWiFiModel * _Nonnull wifiModel) {
self.WifiStatusOne = [wifiModel.wifiStatusCtrl intValue];
self.wifiStatusTwo = [wifiModel.wifi5GStatusCtrl intValue];
self.radioCtrlOne = [wifiModel.radioCtrl intValue];
self.radioCtrlTwo = [wifiModel.radioCtrl5G intValue];
self.channelCtrlOne = [wifiModel.channelCtrl intValue];
self.channelCtrlTwo = [wifiModel.channelCtrl5G intValue];
} failure:^(H3CError *error) {
[MHToast hiddenProgressHUD];
[MHToast showToastHUD:error.errorDesc];
}];
} failure:^(H3CError *error) {
[MHToast hiddenProgressHUD];
[MHToast showToastHUD:error.errorDesc];
}];
```
设置Wi-Fi信息,接口传入的`AttrsModel`的每个属性值,若不需要修改的值,把上次获取(Get)到的值一并传入(不能为空)。
```
[H3CGatewayObject setWifiInfoWithAttrs:attrModel success:^(id obj) {
} failure:^(H3CError *error) {
if (error.retCode == 73) {
[MHToast showToastHUD:@"请勿输入生僻字符"]; return;
}
else if (error.retCode == -1 && isLocal) {
// 超时,有可能配置成功断开Wi-Fi了需要提醒用户
return;
}
[MHToast showToastHUD:error.errorDesc];
}];
```
### 二、上网设置
上网设置模块需导入头文件`#import <H3CMagicKit/H3CGatewayObject+NetModeConfig.h>`
#### 2.1 确认当前上网方式
先调用是否是中继状态接口,确定当前是否是中继状态(下面接口返回中继状态,可能是有线中继或者无线中继)
```
[H3CGatewayObject getNetworkSettingTrunKSatateInfoWithSuccess:^(BOOL isRepeating) {
if (isRepeating) {
// 为中继模式,进一步确定为有线中继还是无线中继
[self requestRepeatingData];
}else {
// 非中继模式
[self requestDataNotRepeating];
}
} failure:^(H3CError *error) {
[MHToast showToastHUD:error.errorDesc];
[MHToast hiddenProgressHUD];
}];
}
```
* 若是中继状态,则调用有线中继接口
通过该接口判断是否为有线中继
```
[H3CGatewayObject getNetworkSettingCableTrunkingInfoWithSuccess:^(H3CCableTrunkModel * _Nonnull model) {
// 非有线中继,则走无线中继
int wirebridge = [model.repeaterStatus intValue];
if (wirebridge ==1 || wirebridge==4) {
// 无线中继
// 调用无线中继接口,继续获取无线中继相关信息
}
else {
// 有线中继
}
} failure:^(H3CError *error) {
[MHToast showToastHUD:error.errorDesc];
[MHToast hiddenProgressHUDWithTitle];
}];
```
否则为无线中继,获取无线中继信息
```
[H3CGatewayObject getNetworkSettingWirelessTrunkingInfoWithSuccess:^(H3CWirelessTrunkModel * _Nonnull model) {
} failure:^(H3CError *error) {
[MHToast hiddenProgressHUD];
[MHToast showToastHUD:error.errorDesc];
}];
```
* 若不是中继状态(即DHCP、PPPoE、Static IP),则调用网络设置常规信息获取接口
```
[H3CGatewayObject getNetworkSettingNormalInfoWithSuccess:^(H3CNetModeNormalModel * _Nonnull model) {
[MHToast hiddenProgressHUDWithTitle];
int netPlayMode = [model.netPlayMode intValue];
if (netPlayMode == 1) { // DHCP
} else if (netPlayMode == 2) { // PPPoE
} else if (netPlayMode == 3) { // Static IP)
}
} failure:^(H3CError *error) {
}];
````
#### 2.2 配置上网方式上网方式
若网关当前为为中继状态,则需要先断开中继,才能配置其他上网方式。
* 断开有线中继
```
[H3CGatewayObject disconnectNetworkSettingCableTrunkingWithSuccess:^(id obj) {
[MHToast hiddenProgressHUD];
} failure:^(H3CError *error) {
if (error.retCode == -1) { // 网络异常也算成功
}else {
}
}];
```
* 断开无线中继
```
[H3CGatewayObject disconnectNetworkSettingWirelessTrunkingWithSuccess:^(id obj) {
} failure:^(H3CError *error) {
if (error.retCode == -1 || error.retCode == 999) { // 网络异常也算成功 999:请求数据超时
}else {
[MHToast showToastHUD:error.errorDesc];
}
}];
```
* 配置DHCP
```
[H3CGatewayObject setNetworkSettingDHCPInfoWithSuccess:^(id obj) {
[MHToast showToastHUD:@"上网模式已设置为DHCP模式" ];
} failure:^(H3CError *error) {
}];
```
* 配置PPPoE
```
H3CNetModePppoeAttrs *attr = [[H3CNetModePppoeAttrs alloc] init];
attr.broadBandId = self.broadBandId;
attr.broadBandPsd = self.broadBandPsd;
[MHToast showProgressHUDWithTitle:@"正在下发设备配置信息..."];
[H3CGatewayObject setNetworkSettingPPPOEInfoWithAttrs:attr success:^(id obj) {
[MHToast hiddenProgressHUD];
[MHToast showToastHUD:@"配置成功" ];
[self.navigationController popViewControllerAnimated:YES];
} failure:^(H3CError *error) {
[MHToast hiddenProgressHUD];
[MHToast showToastHUD:error.errorDesc];
}];
```
* 静态IP
```
H3CNetModeStaticAttrs *attr = [[H3CNetModeStaticAttrs alloc] init];
attr.ipAdress = self.ipAdress;
attr.mask = self.mask;
attr.gateway = self.gateway;
attr.dns1 = self.dns1;
attr.dns2 = self.dns2;
[H3CGatewayObject setNetworkSettingStaticIpInfoWithAttrs:attr success:^(id obj) {
[MHToast showToastHUD:@"上网模式已设置为静态IP模式"];
} failure:^(H3CError *error) {
}];
```
* 配置有线中继
```
[H3CGatewayObject setNetworkSettingCableTrunkingInfoWithSuccess:^(id obj) {
[MHToast hiddenProgressHUD];
} failure:^(H3CError *error) {
if (error.retCode == -1) { // 网络异常也算成功
}else {
}
}];
```
* 配置无线中继
```
H3CWirelessTrunkAttrs *attr = [[H3CWirelessTrunkAttrs alloc] init];
attr.wifiName = _wifiName;
attr.encryptMode = @(_encryptModel);
attr.wifiSignal = @(3);
attr.wifiPwd = psw;
[H3CGatewayObject setNetworkSettingWirelessTrunkingInfoWithAttrs:attr success:^(id obj) {
} failure:^(H3CError *error) {
}];
```