Thursday, 8 March 2018

Web Service Managaer


import UIKit
import Alamofire
import KRProgressHUD

class WebServiceManager: NSObject {
    
    static var instance:WebServiceManager!
    
    class func sharedInstance() -> WebServiceManager {
        self.instance = (self.instance ?? WebServiceManager())
        return self.instance
    }
    
    class func callGeneralWebServiceWithViewController(WSUrl:String,WSMethod:HTTPMethod,WSParams:NSDictionary,isLoader:Bool,iViewController:UIViewController,WSCompletionBlock:@escaping (_ data:AnyObject?,_ error:NSError?) -> ()) {
        
        if self.sharedInstance().ISNetworkAvailable() {
            let iStrWSURL  = Constant.BASE_URL + WSUrl
            
            let url = URL(string: iStrWSURL)
            let aStrDomain = url?.host
            if isLoader {
                KRProgressHUD.show()
            }
            
            Alamofire.request(iStrWSURL, method: WSMethod, parameters: WSParams as? [String : AnyObject], encoding: URLEncoding.httpBody).response(completionHandler: { (iResponse) in
                do
                {
                    let object:Any? = try JSONSerialization.jsonObject(with: iResponse.data!, options:.mutableLeaves)
                    if object! is NSArray
                    {
                        var iArrResponse: NSArray!
                        iArrResponse = object as! NSArray
                        if isLoader {
                            KRProgressHUD.dismiss()
                        }
                        WSCompletionBlock(iArrResponse!,nil)
                    }
                    else
                    {
                        var iDictResponse: Dictionary <String, AnyObject>!
                        iDictResponse = object as! Dictionary
                        if isLoader {
                            KRProgressHUD.dismiss()
                        }
                        WSCompletionBlock(iDictResponse! as AnyObject?,nil)
                    }
                }
                catch let caught as NSError
                {
                    if isLoader {
                        KRProgressHUD.dismiss()
                    }
                    WSCompletionBlock(nil,caught)
                }
                catch
                {
                    KRProgressHUD.dismiss()
                    let error: NSError = NSError(domain: aStrDomain!, code: 1, userInfo: nil)
                    WSCompletionBlock(nil,error)
                }
                
            })
        }else {
            let iAlertController = UIAlertController(title: "", message: "Please check your internet connection", preferredStyle: .alert)
            let iOkAction = UIAlertAction(title: "OK", style: .default, handler: { (iOkAction) in
            })
            iAlertController.addAction(iOkAction)
            iViewController.present(iAlertController, animated: true, completion: nil)
        }
        
    }
    
    class func callGeneralWebService(WSUrl:String,WSParams:NSDictionary,isLoader:Bool,WSCompletionBlock:@escaping (_ data:AnyObject?,_ error:NSError?) -> ()) {
        
        if self.sharedInstance().ISNetworkAvailable() {
            let iStrWSURL  = Constant.BASE_URL + WSUrl
            
            let url = URL(string: iStrWSURL)
            let aStrDomain = url?.host
            if isLoader {
                KRProgressHUD.show()
            }
            
            Alamofire.request(iStrWSURL, method: .post ,parameters: WSParams as? [String : AnyObject]).response(completionHandler: { (iResponse) in
                do
                {
                    let object:Any? = try JSONSerialization.jsonObject(with: iResponse.data!, options:.mutableLeaves)
                    if object! is NSArray
                    {
                        var iArrResponse: NSArray!
                        iArrResponse = object as! NSArray
                        if isLoader {
                            KRProgressHUD.dismiss()
                        }
                        WSCompletionBlock(iArrResponse!,nil)
                    }
                    else
                    {
                        var iDictResponse: Dictionary <String, AnyObject>!
                        iDictResponse = object as! Dictionary
                        if isLoader {
                            KRProgressHUD.dismiss()
                        }
                        WSCompletionBlock(iDictResponse! as AnyObject?,nil)
                    }
                }
                catch let caught as NSError
                {
                    if isLoader {
                        KRProgressHUD.dismiss()
                    }
                    WSCompletionBlock(nil,caught)
                }
                catch
                {
                    KRProgressHUD.dismiss()
                    let error: NSError = NSError(domain: aStrDomain!, code: 1, userInfo: nil)
                    WSCompletionBlock(nil,error)
                }
                
            })
            
        }
        
    }
    
    
    class func callImageUploadWithParameterUsingMultipart(WSUrl:String,WSParams:NSDictionary,isLoader:Bool,iImgName:UIImage, WSCompletionBlock:@escaping (_ data:AnyObject?,_ error:NSError?) -> ()) {
        
        if self.sharedInstance().ISNetworkAvailable()
        {
            //let iURLWS = NSURL(string: CC_Constant.BASE_URL + WSUrl)!
            
            if isLoader {
                KRProgressHUD.show()
            }
            
            Alamofire.upload(multipartFormData: { (multipartFormData) in
                multipartFormData.append(UIImagePNGRepresentation(iImgName)!, withName: "signature_photo", fileName: "swift_file.png", mimeType: "image/png")
                for (key, value) in WSParams {
                    multipartFormData.append((value as AnyObject).data(using: String.Encoding.utf8.rawValue)!, withName: key as! String)
                }
            }, to:Constant.BASE_URL + WSUrl)
            { (result) in
                switch result {
                case .success(let upload, _, _):
                    
                    upload.uploadProgress(closure: { (progress) in
                        print(progress)
                    })
                    
                    upload.responseJSON { response in
                        if isLoader {
                            KRProgressHUD.dismiss()
                        }
                        print(response.request ?? "")  // original URL request
                        print(response.response ?? "") // URL response
                        print(response.data ?? "")     // server data
                        print(response.result.value ?? "")   // result of response serialization
                        if response.result.value is NSArray
                        {
                            var iArrResponse: NSArray!
                            iArrResponse = response.result.value as! NSArray
                            if isLoader {
                                KRProgressHUD.dismiss()
                            }
                            WSCompletionBlock(iArrResponse!,nil)
                        }
                        else
                        {
                            var iDictResponse: Dictionary <String, AnyObject>!
                            iDictResponse = response.result.value as! Dictionary
                            if isLoader {
                                KRProgressHUD.dismiss()
                            }
                            WSCompletionBlock(iDictResponse! as AnyObject?,nil)
                        }
                        
                    }
                    
                case .failure(let encodingError) :
                    print (encodingError.localizedDescription)
                    if isLoader {
                        KRProgressHUD.dismiss()
                    }
                    WSCompletionBlock(nil,encodingError as NSError?)
                }
            }
        }
    }

    func ISNetworkAvailable() -> Bool
    {
        if Reachability.isInternetAvailable()
        {
            return true
        }
        else
        {
            return false
        }
    }
   // (cell.imageView)?.sd_setImage(with: NSURL(string: imgStr)! as URL, placeholderImage: nil, options: SDWebImageOptions.refreshCached, completed: nil)

}

No comments:

Post a Comment