iOS-jumao/AnXuanApp/APP/ANXUANFirstVC.swift

349 lines
15 KiB
Swift

import Foundation
import Network
import Alamofire
import HandyJSON
class ANXUANFirstVC: UIViewController {
var isFirstShow : Bool = false
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
let AxNWPathMonitor = NWPathMonitor()
override func viewDidLoad() {
super.viewDidLoad()
setNeedsStatusBarAppearanceUpdate()
showAXProgreeHUD("正在加载...")
//
respNet()
}
func respNet() {
AxNWPathMonitor.pathUpdateHandler = { [weak self] pathStr in
guard let self = self else { return }
if pathStr.status == .satisfied {
self.AXgetHostInfo()
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
self.getNetCode()
}
self.AxNWPathMonitor.cancel()
} else {
print("网络不可用")
}
}
let queueStr = DispatchQueue(label: "NetworkMonitor")
AxNWPathMonitor.start(queue: queueStr)
}
func AXgetHostInfo(){
let GetHostDefUrl = AXUserField.CurrentNewGetUrlHostOne
AF.request(GetHostDefUrl, method: .get).cacheResponse(using: ResponseCacher.doNotCache).responseString{ (returnResult) in
switch returnResult.result{
case .success(_):
if let rspData = returnResult.value {
if !rspData.isEmpty {
let dataStr = AESUtils.aesDecrypt(rspData)
let hostArray = dataStr?.split(separator: "+")
UserDefaults.standard.set(hostArray, forKey: AXNXUANNewApi.K_AX_Router_Host)
}
}
case .failure(_):
self.AXgetHostInfoOne()
}
}
}
func AXgetHostInfoOne(){
let GetHostDefUrl = AXUserField.CurrentNewGetUrlHostTwo
AF.request(GetHostDefUrl, method: .get).cacheResponse(using: ResponseCacher.doNotCache).responseString{ (returnResult) in
switch returnResult.result{
case .success(_):
if let rspData = returnResult.value {
if !rspData.isEmpty {
let dataStr = AESUtils.aesDecrypt(rspData)
let hostArray = dataStr?.split(separator: "+")
UserDefaults.standard.set(hostArray, forKey: AXNXUANNewApi.K_AX_Router_Host)
}
}
case .failure(_):
self.AXgetHostInfoTwo()
}
}
}
func AXgetHostInfoTwo(){
let GetHostDefUrl = AXUserField.CurrentNewGetUrlHostThree
AF.request(GetHostDefUrl, method: .get).cacheResponse(using: ResponseCacher.doNotCache).responseString{ (returnResult) in
switch returnResult.result{
case .success(_):
if let rspData = returnResult.value {
if !rspData.isEmpty {
let dataStr = AESUtils.aesDecrypt(rspData)
let hostArray = dataStr?.split(separator: "+")
UserDefaults.standard.set(hostArray, forKey: AXNXUANNewApi.K_AX_Router_Host)
}
}
case .failure(_):
print("获取主机失败3")
}
}
}
func showLoginAlert(_ loginErrorSrtr :String) {
var VC = UIAlertController(title: "出错提示", message: "加载失败=\(loginErrorSrtr)=", preferredStyle: UIAlertController.Style.alert)
var okClick = UIAlertAction(title: "重试", style: UIAlertAction.Style.default) {
(action: UIAlertAction!) -> Void in
if (Locale.current.identifier.hasPrefix("zh")) {
if AXUserField.DefaultAXYQM.isEmpty {
self.AXgoLoginCt()
} else {
self.getNetCode()
}
}else {
self.AXgoLoginCt()
}
}
var cancelClick = UIAlertAction(title: "退出", style: UIAlertAction.Style.destructive) {
(action: UIAlertAction!) -> Void in
UIApplication.shared.perform(#selector(NSXPCConnection.suspend))
}
VC.addAction(okClick)
VC.addAction(cancelClick)
self.present(VC, animated: true, completion: nil)
}
func getNetCode(){
let codeStr1 : String = UserDefaults.standard.string(forKey: AXUserField.SaveINVITECODE) ?? ""
if codeStr1 == "" {
UserDefaults.standard.setValue(AXUserField.DefaultAXYQM, forKey: AXUserField.SaveINVITECODE)
}
OpenInstallSDK.defaultManager()?.getInstallParmsCompleted({ (appData:OpeninstallData?) in
if let dic = appData?.data{
if let codeStr = dic["InviteCode"]{
UserDefaults.standard.setValue(codeStr as! String, forKey: AXUserField.SaveINVITECODE)
self.AXgetVpnVersion()
}
else{
self.AXgetVpnVersion()
}
}
else{
self.AXgetVpnVersion()
}
})
}
func AXgetVpnVersion(){
let infoDictionaryDef = Bundle.main.infoDictionary
let VersionStr = infoDictionaryDef? ["CFBundleShortVersionString"] as! String
let par : Parameters = ["channelNo":UserDefaults.standard.string(forKey: AXUserField.SaveINVITECODE), "versionNo":VersionStr]
AF.request(MyJmUtils.getJmCurrentUrl()+AXNXUANNewApi.GetVpnVersion,method: .get,parameters: par).responseString { response in
switch response.result{
case .success(let value):
let model = JSONDeserializer<DefaultRsp>
.deserializeFrom(json: value)
if model?.code == 200{
self.AXinitSomething()
}
else{
self.AXinitSomething()
}
case .failure(let error):
self.replaceServerRetry(error.localizedDescription)
}
}
}
func AXinitSomething(){
let userInfoData = UserDefaults.standard
if userInfoData.bool(forKey: AXUserField.IsAXRegister) {
let tokenStr = userInfoData.string(forKey: AXUserField.VpnAXToken)
if tokenStr != nil && !tokenStr!.isEmpty {
isFirstShow = false
GetJmUserInfo()
} else {
AXgoLoginCt()
}
} else {
if(iseChineseLang()){
if AXUserField.DefaultAXYQM.isEmpty {
self.AXgoLoginCt()
} else {
self.enrollmentReq()
}
} else {
self.AXgoLoginCt()
}
}
}
func iseChineseLang() -> Bool {
if let language = Locale.preferredLanguages.first {
return language.hasPrefix("zh")
}
return false
}
func AXgoLoginCt(){
let LVC = ANXUANLoginVC()
self.navigationController?.pushViewController(LVC, animated: true)
self.dismiss(animated: true)
}
//
func enrollmentReq(){
let phoneUuid : String = MyJmTool.getJmDeviceNumber()
let param : Parameters = ["password":AXUserField.DefaultAXPsw ,"checkPassword": AXUserField.DefaultAXPsw ,"iosDevice": phoneUuid , "invitationCode":UserDefaults.standard.string(forKey: AXUserField.SaveINVITECODE) ?? AXUserField.DefaultAXYQM,"clientIp":"192.168.1.1","from":"6","paid":ANXUANHomeViewModel.getMD5Paid()]
let dataSta : String = self.dicJmValueString(param) ?? ""
let dataJmEncrypt : String = dataSta.aesJMRegisterEncrypt( ) ?? ""
let newParam : Parameters = ["data":dataJmEncrypt]
AF.request(MyJmUtils.getJmCurrentUrl() + AXNXUANNewApi.RegisterAuto, method: .post, parameters: newParam,encoding: URLEncoding.queryString).responseString { [self] resultDic in
switch resultDic.result {
case .success(let value):
if let rspData = resultDic.value {
let model = JSONDeserializer<RegisterDefRsp>
.deserializeFrom(json: value)
if model?.code == 200{
OpenInstallSDK.reportRegister()
let userInfoJmProfile = UserDefaults.standard
userInfoJmProfile.setValue(true, forKey: AXUserField.IsAXRegister)
userInfoJmProfile.setValue(model?.data?.phoneNumber ?? "", forKey: AXUserField.AXUser)
userInfoJmProfile.setValue(AXUserField.DefaultAXPsw, forKey: AXUserField.SavePsw)
userInfoJmProfile.setValue(true, forKey: AXUserField.IsSAXavePsw)
isFirstShow = true
self.reqAXLogin(model?.data?.phoneNumber ?? "",AXUserField.DefaultAXPsw)
}
else if model?.code == 20062 {
let userJmName = model?.data?.phoneNumber ?? ""
let userInfoJmProfile = UserDefaults.standard
userInfoJmProfile.setValue(true, forKey: AXUserField.IsAXRegister)
userInfoJmProfile.setValue(true, forKey: AXUserField.IsSAXavePsw)
userInfoJmProfile.setValue(userJmName, forKey: AXUserField.AXUser)
AXgoLoginCt()
}
else {
AXgoLoginCt()
}
}
case .failure(let error):
AXgoLoginCt()
}
}
}
func reqAXLogin(_ userAXName:String,_ AXpassword:String){
let userNameJmEncrypt = userAXName.aesEncrypt()
let passwordJmEncrypt = AXpassword.aesEncrypt()
let param : Parameters = ["phoneNumber":userNameJmEncrypt!, "password":passwordJmEncrypt!,"osType":"ios"]
AF.request(MyJmUtils.getJmCurrentUrl()+AXNXUANNewApi.PostLogin,method: .post,parameters: param).responseString { [self] resultDic in
switch resultDic.result {
case .success(let value):
if let model = JSONDeserializer<LoginModel>
.deserializeFrom(json: value) {
if model.code == "1000"{
let userJmInfo = UserDefaults.standard
userJmInfo.setValue(userAXName, forKey: AXUserField.AXUser)
userJmInfo.setValue(model.data?.phToken, forKey: AXUserField.PhAXToken)
userJmInfo.setValue(model.data?.userId, forKey: AXUserField.AXUserId)
userJmInfo.setValue(model.data?.vpnToken, forKey: AXUserField.VpnAXToken)
userJmInfo.setValue(true,forKey: AXUserField.IsAXRegister)
userJmInfo.synchronize()
self.GetJmUserInfo()
}else{
self.AXgoLoginCt()
self.showAXTextHUD(model.message ?? "登陆失败" , dismissAfterDelay: 1.5)
}
}
else{
self.AXgoLoginCt()
self.showAXTextHUD("登陆失败,请检查网络设置", dismissAfterDelay: 1.5)
}
case .failure(_):
self.AXgoLoginCt()
self.showAXTextHUD("登陆失败,请检查网络设置", dismissAfterDelay: 1.5)
}
}
}
func GetJmUserInfo( ){
let userInfoJmProfile = UserDefaults.standard
let phJmToken = userInfoJmProfile.string(forKey: AXUserField.PhAXToken) ?? ""
let userJMName = userInfoJmProfile.string(forKey: AXUserField.AXUser) ?? ""
let par : Parameters = ["phoneNumber":userJMName,"phToken":phJmToken,"osType":"ios","deviceToken":UserDefaults.standard.string(forKey: AXUserField.DeviceJmToken) ?? ""]
AF.request(MyJmUtils.getJmCurrentUrl() + AXNXUANNewApi.GetAXUserInfo, method: .post,parameters: par )
.responseString{ (returnResult) in
self.hideAXHUD()
switch returnResult.result{
case .success(_):
if let rspData = returnResult.value {
let decryptUserStr = AESUtils.aesDecrypt(rspData)
let jsonUserData = decryptUserStr!.data(using: .utf8)
let UserStr = String(data:jsonUserData!,encoding:.utf8)
let model = JSONDeserializer<UserInfoModel>
.deserializeFrom(json: UserStr ?? "")
if model?.code == 0 {
userInfoJmProfile.setValue(model?.data?.vpnExpireTime, forKey: AXUserField.AXExpireTime)
userInfoJmProfile.setValue(model?.data?.expired, forKey: AXUserField.IsAXExpire)
userInfoJmProfile.setValue(model?.data?.nickname, forKey: AXUserField.NickAXName)
userInfoJmProfile.setValue(model?.data?.isPerfect, forKey: AXUserField.IsAXPerfect)
userInfoJmProfile.setValue(model?.data?.userCommand, forKey: AXUserField.userAXCommand)
self.JumpMain()
} else {
self.AXgoLoginCt()
}
} else {
self.AXgoLoginCt()
}
case .failure(_):
self.AXgoLoginCt()
}
}
}
func JumpMain(){
//
let vc = ANXUANMainSpeedVC()
vc.isFirstShow = isFirstShow
self.navigationController?.pushViewController(vc, animated: true)
self.dismiss(animated: true)
}
public func dicJmValueString(_ dic:[String : Any]) -> String?{
let dataStr = try? JSONSerialization.data(withJSONObject: dic, options: [])
let str = String(data: dataStr!, encoding: String.Encoding.utf8)
return str
}
func replaceServerRetry(_ loginErrorSrtr:String){
if MyJmUtils.switcAXhHost() {
self.AXgetVpnVersion()
} else {
self.showLoginAlert(loginErrorSrtr)
}
}
}