account.swift 5.86 KB
//
//  account.swift
//  XSTLive
//
//  Created by 葛建军 on 16/11/10.
//  Copyright © 2016年 HANGZHOUTEAM. All rights reserved.
//

import Foundation
class AccountManager{
    var rawUserInfo:JSON?
    var userid:String=""
    var token:String?
    var refreshToken:String=""
    init(){
        rawUserInfo=Setting.getUserInfo()
        
        if let info=rawUserInfo{
            userid=info.contentData()["f_Account"].stringValue
            
        }
        
        
    }
    func setTokenInfo(tokenInfo:JSON?){
        if let info=tokenInfo{
            token="Bearer "+info["access_token"].stringValue
            refreshToken=info["refresh_token"].stringValue
        }else{
            token=""
        }
    }
    func loadToken()->JSON?{
        if let token=Setting.getJson(key: "_token"){
            return token
        }
        return nil
    }
    func saveToken(tokenInfo:JSON){
        _=Setting.saveJson(json: tokenInfo, forKey: "_token")
    }
    func isOnline() -> Bool {
        if id() != "" {
            return true
        }else{
            return false
        }
    }
    func id()->String{
        if let info=rawUserInfo{
            return info.contentData()["account"].stringValue
        }
        return ""
    }
    func name()->String{
        if let info=rawUserInfo{
            return info.contentData()["nickname"].stringValue
        }
        return ""
    }
    func photo()->String{
        if let info=rawUserInfo{
            return info.contentData()["headimg"].stringValue
        }
        return "defphoto"
    }
    func phone()->String{
        if let info=rawUserInfo{
            return info.contentData()["mobile"].stringValue
        }
        return ""
    }
    
    
    func logOut(){
        //退出云信登录
        XSTLiveManager.shareXSTLiveManager().logout { (success) in
            if success {
                self.cleanUserInfoAndPoptoRootVC()
            }
        }
        
    }
    func cleanUserInfoAndPoptoRootVC(){
        rawUserInfo=nil
        userid=""
        _=Setting.saveUserInfo("")
        if appRootViewController().classForCoder==UINavigationController.classForCoder(){
            (appRootViewController() as! UINavigationController).popToRootViewController(animated: false)
        }else{
            appRootViewController().dismiss(animated: false, completion: {
                (appRootViewController() as! UINavigationController).popToRootViewController(animated: true)
            })
        }
        //发出刷新首页通知
        NotificationCenter.default.post(name: NSNotification.Name(rawValue: "refreshFirstVC"), object: nil)
        LeadViewController.instance.removeAll()
        LeadViewController.instance.showLogin()
    }
    func refreshUserInfo(completionHandler:((Bool) -> Void)?){
        AppDelegate.instance().httpServer.getCurrentInfo { (str, error) -> Void in
            if error == nil {
                if JSON.fromString(jsonString: str)!["status"].intValue==4 {
                    AppDelegate.instance().httpServer.refreshToken(completionHandler: { (str, error) in
                        if error == nil && JSON.fromString(jsonString: str)!["status"].intValue==1 {
                            self.setTokenInfo(tokenInfo: JSON.fromString(jsonString: str))
                            if let call=completionHandler{
                                call(true)
                            }
                        }else{
                            if let call=completionHandler{
                                call(false)
                            }
                            AppDelegate.instance().accountManager.logOut()
                            AppDelegate.instance().window?.makeToast("登录信息已过期,请重新登录", duration: 2, position: CSToastPositionBottom)
                        }
                        }, token: self.refreshToken)
                }else{
                    httpJsonResule(jsonString: str, error: error, successHandler: { (json) -> Void in
                        _=Setting.saveUserInfo(str)
                        self.rawUserInfo=json
                        self.userid=json.contentData()["id"].stringValue
                        if let call=completionHandler{
                            call(true)
                        }
                        }, failHandler: { (error) -> Void in
                            if let call=completionHandler{
                                call(false)
                            }
                    })
                }
            }else{
                if let call=completionHandler{
                    call(false)
                }
            }
        }
    }

    
}
class Setting{
    class func save(_ value:String,forKey key:String)->Bool{
        UserDefaults.standard.set(value, forKey: key)
        return UserDefaults.standard.synchronize()
    }
    class func getString(_ key:String)->String?{
        return UserDefaults.standard.string(forKey: key)
    }
    
    class func saveUserInfo(_ info:String?)->Bool{
        if let ret=info{
            UserDefaults.standard.set(ret, forKey: HTTPServer.URL_ACCOUNTCURRENTINFO)
        }else{
            UserDefaults.standard.set(nil, forKey: HTTPServer.URL_ACCOUNTCURRENTINFO)
        }
        return UserDefaults.standard.synchronize()
    }
    class func getUserInfo()->JSON?{
        let ob = UserDefaults.standard.string(forKey: HTTPServer.URL_ACCOUNTCURRENTINFO)
        return JSON.fromString(jsonString: ob)
    }
    class func saveJson(json:JSON,forKey key:String)->Bool{
        do{
            try UserDefaults.standard.set(json.rawData(), forKey: key)
            return UserDefaults.standard.synchronize()
        }catch{
            return false
        }
    }
    class func getJson(key:String)->JSON?{
        let data=UserDefaults.standard.data(forKey: key)
        if let d=data{
            let json=JSON(data: d)
            return json
        }
        return nil
    }
}