网关控制(详细示例)

## 网关控制 调用网关管中的切换设备接口后,可以获取到设备控制权限,即网关的接入用户列表、游戏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) { }]; ```