Как использовать очередь с func alamofire при вызове в другом классе - PullRequest
0 голосов
/ 12 июня 2019

Я использую очередь Alamofire в func при вызове другого класса

как использовать очередь в alamofire при истечении срока действия токена? (Код ответа == 401)

i 5 раз вызывается NetworkRequestClass.requestв момент и когда срок действия маркера обновления истекает, аварийный токен аварийно завершает работу и возвращает все остальные запросы. Код ответа 401 Может ли кто-нибудь помочь мне исправить этот код?

func internet() -> Bool
{
    return Connectivity.isConnectedToInternet()
}

//func .get with parameters
func request(url:String,method:HTTPMethod,parameters:Parameters,intHeaders:Int,completions: @escaping returnService) {
    if UserDefaults.standard.bool(forKey: "progressRequset") == false {
        UserDefaults.standard.set(true, forKey: "progressRequset")
        if self.internet() == true {
    if intHeaders == 0  {
        self.headers = nil
    }
    else if intHeaders == 1
    {
        self.headers = ["Authorization": "bearer " + UserDefaults.standard.string(forKey: "token")!]
    }
        func req() {
            Alamofire.request(url, method: method, parameters: parameters,headers: self.headers).validate().responseJSON() { response in
            let responseCode = response.response?.statusCode ?? 0
            if responseCode == 200 {
                self.coutProgressRequest = 0
                if let jason = response.result.value as? Dictionary<String, Any>
                {
                    completions(jason,responseCode)
                }
                UserDefaults.standard.set(false, forKey: "progressRequset")
                return
            }
            else if responseCode == 401 {
                self.refreshToken() { (jsonRefresh, codeRefresh) in
                    if codeRefresh == 200 {
                        req()
                        return
                    }
                    else if codeRefresh == 401
                    {
                        UserDefaults.standard.set(false, forKey: "progressRequset")
                        completions(nil,401)
                        return
                    }
                    else {
                        UserDefaults.standard.set(false, forKey: "progressRequset")
                    }
                }
            }
           else if responseCode == 403
            {
                UserDefaults.standard.set(false, forKey: "progressRequset")
                completions(nil,responseCode)
                return
            }
           else if responseCode == 0
            {
                UserDefaults.standard.set(false, forKey: "progressRequset")
                completions(nil,responseCode)
                return
            }
            else
            {
                UserDefaults.standard.set(false, forKey: "progressRequset")
                completions(nil,1000)
                return
            }
        }
    }
        req()
    }
        else {
            UserDefaults.standard.set(false, forKey: "progressRequset")
            completions(nil,1001)
            return
        }
    }
}

//func end

func refreshToken(completions: @escaping returnService) {
    Alamofire.request(self.urlStringRefreshToken, method: .post,parameters: self.parametersRefreshToken,encoding: JSONEncoding.default, headers: self.headers).validate().responseJSON  { response in
        print("refresh token",response.response?.statusCode ?? 0)
        if response.response?.statusCode == 200 {
            let ObjectTwo = response.result.value as? Dictionary<String,Any>
            if let accesstoken = ObjectTwo?["access_token"] as? String {
                if let refreshtokenTwo = ObjectTwo?["refresh_token"] as? String {
                    UserDefaults.standard.set(refreshtokenTwo , forKey: "refreshToken")
                    UserDefaults.standard.set(accesstoken , forKey: "token")
                    if UserDefaults.standard.string(forKey: "token") == accesstoken {
                        self.headers = ["Authorization": "bearer " + UserDefaults.standard.string(forKey: "token")!]
                        if self.headers == ["Authorization": "bearer " + UserDefaults.standard.string(forKey: "token")!] {
                        completions(nil,200)
                        return
                        }
                    }
                }
            }
        }
        else if response.response?.statusCode == 401
        {
            completions(nil,401)
            return
        }
        else
        {
            completions(nil,1000)
        }
    }
}
}

вызывается в другом классе:

let NetworkRequestClass = NetworkRequest()
    NetworkRequestClass.request(url: urlString, method: .get, parameters: parameters,intHeaders:1) {
        (json,code) in ... }
...