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)
}