349 lines
15 KiB
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)
|
|
}
|
|
}
|
|
}
|
|
|