// // clientsViewController.swift // cig // // Created by AVINASH on 01/12/16. // Copyright © 2016 AVINASH. All rights reserved. // import UIKit class toolViewController: UIViewController { var TabSelected : String = "" var appdel = UIApplication.sharedApplication().delegate as! AppDelegate var responseString :String! = "" var timer : NSTimer! let BottomTabSelectedColor = UIColor(red: 1.0/255, green: 151.0/255, blue: 214.0/255, alpha: 1.0) var dev_Info_Array : NSArray! var deviceId : Int = 0 var mac : String = "" var sn : String = "" @IBOutlet weak var spinner: UIActivityIndicatorView! @IBOutlet weak var topHeaderView: UIView! @IBOutlet weak var networkBtnOutlet: UIButton! @IBOutlet weak var devicesBtnOutlet: UIButton! @IBOutlet weak var clientsBtnOutlet: UIButton! @IBOutlet weak var configureBtnOutlet: UIButton! @IBOutlet weak var toolBtnOutlet: UIButton! override func viewDidAppear(animated: Bool) { self.navigationController?.navigationBarHidden = true self.topHeaderView.backgroundColor = UIColor(red: 1.0/255, green: 151.0/255, blue: 214.0/255, alpha: 1.0) appdel.stateCount = 0 self.TabSelected = "5" helperClass.tabSeleted(TabSelected,selectedTab:self.toolBtnOutlet,tab1:self.networkBtnOutlet,tab2:self.devicesBtnOutlet,tab3:self.clientsBtnOutlet,tab4:self.configureBtnOutlet) } override func viewDidLoad() { super.viewDidLoad() appdel.stateCount = 0 self.spinner.hidden = true // self.startTimer() } override func viewDidDisappear(animated: Bool) { super.viewDidDisappear(true) self.stopTimer() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } func startTimer() { if timer == nil { self.timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: #selector(toolViewController.serverRequest), userInfo: nil, repeats: true) } } func stopTimer() { if timer != nil { timer!.invalidate() timer = nil } } @IBAction func networkBtnClk(sender: AnyObject) { self.stopTimer() self.appdel.selectedTabIndex == 0 let storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle()) let networkVC = storyboard.instantiateViewControllerWithIdentifier("network") as! networkTopoViewController self.navigationController?.pushViewController(networkVC, animated: false) } @IBAction func devicesBtnClk(sender: AnyObject) { self.stopTimer() self.appdel.selectedTabIndex == 0 let storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle()) let deviceVC = storyboard.instantiateViewControllerWithIdentifier("devices") as! deviceViewController self.navigationController?.pushViewController(deviceVC, animated: false) } @IBAction func clientsBtnClk(sender: AnyObject) { self.stopTimer() self.appdel.selectedTabIndex == 0 let storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle()) let clientVC = storyboard.instantiateViewControllerWithIdentifier("clients") as! clientsViewController self.navigationController?.pushViewController(clientVC, animated: false) } @IBAction func configureBtnClk(sender: AnyObject) { self.stopTimer() self.appdel.selectedTabIndex == 0 let storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle()) let configVC = storyboard.instantiateViewControllerWithIdentifier("config") as! configViewController self.navigationController?.pushViewController(configVC, animated: false) } @IBAction func toolBtnClk(sender: AnyObject) { self.appdel.selectedTabIndex == 0 } @IBAction func refreshBtnClk(sender: AnyObject) { } @IBAction func logoutBtnClk(sender: AnyObject) { self.stopTimer() self.simulateServerRequest() } override func touchesBegan(touches: Set, withEvent event: UIEvent?) { } func simulateServerRequest() { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), { let requet_URL_String : String = String(format: "http://%@/api/logout", self.appdel.CAP_IP) let request = NSMutableURLRequest(URL: NSURL(string:requet_URL_String as String)!) request.HTTPMethod = "POST" let postString = String(format: "token=%@",self.appdel.token) print("postString : \(postString)") request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding) let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in guard error == nil && data != nil else { // check for fundamental networking error print("error=\(error)") let alert = UIAlertController(title: "", message: "Sorry connection lost , token expired press OK to login again!", preferredStyle: UIAlertControllerStyle.Alert) alert.addAction(UIAlertAction(title: "Ok", style: .Default, handler: { (action: UIAlertAction!) in print("message : logout successful"); self.appdel.token = "" self.navigationController?.popToRootViewControllerAnimated(false) })) self.presentViewController(alert, animated: true, completion: nil) return } if let httpStatus = response as? NSHTTPURLResponse where httpStatus.statusCode != 200 { // check for http errors print("statusCode should be 200, but is \(httpStatus.statusCode)") print("response = \(response)") } self.responseString = String(data: data!, encoding: NSUTF8StringEncoding) print("responseString = \(self.responseString.componentsSeparatedByString("\n")[1].componentsSeparatedByString(":")[1].componentsSeparatedByString("\"")[1])") if self.responseString.componentsSeparatedByString("\n")[1].componentsSeparatedByString(":")[1].componentsSeparatedByString("\"")[1] == "Success" { dispatch_async(dispatch_get_main_queue(), { // self.spinner.hidden = true // self.spinner.stopAnimating() print("message : logout successful"); self.appdel.token = "" self.navigationController?.popToRootViewControllerAnimated(false) }) } else{ dispatch_async(dispatch_get_main_queue(), { let alert = UIAlertController(title: "", message: "Sorry connection lost , token expired press OK to login again!", preferredStyle: UIAlertControllerStyle.Alert) alert.addAction(UIAlertAction(title: "Ok", style: .Default, handler: { (action: UIAlertAction!) in print("message : logout successful"); self.appdel.token = "" self.navigationController?.popToRootViewControllerAnimated(false) })) self.presentViewController(alert, animated: true, completion: nil) }) } } task.resume() }) } func serverRequest() { //self.spinner.hidden = false let requet_URL_String : String = String(format: "http://%@/", self.appdel.CAP_IP)//changed on 18th feb format: "http://%@/" self.simulateNetworkRequest(requet_URL_String,requestMethodType:"POST") } func serverRequestFirmwateUpdate() { //self.spinner.hidden = false let requet_URL_String : String = String(format: "http://%@/upgrade", self.appdel.CAP_IP)//changed on 18th feb format: "http://%@/" self.simulateFirmwareUpdate(requet_URL_String,requestMethodType:"POST") } func simulateNetworkRequest(url:String,requestMethodType:String) { let postString = String(format: "token=%@",self.appdel.token) self.appdel.baseURL = url let paramString:String = postString var methodType : String var httpMethodName:String let myRequest:String = String() methodType = requestMethodType httpMethodName = "api/deviceinfo" var webService:AnyObject? webService = myRequest.dataRequest( myRequest.baseURL(), param:paramString , httpMethodTyp:methodType , httpMethodName:httpMethodName ) if appdel.networkErrorFlag == 1{ // self.spinner.hidden = true appdel.networkErrorFlag = 0 self.stopTimer() let alert = UIAlertController(title: "", message: "Sorry connection lost , token expired press OK to login again!", preferredStyle: UIAlertControllerStyle.Alert) alert.addAction(UIAlertAction(title: "Ok", style: .Default, handler: { (action: UIAlertAction!) in print("message : logout successful"); self.appdel.token = "" self.navigationController?.popToRootViewControllerAnimated(false) })) self.presentViewController(alert, animated: true, completion: nil) }else{ print("-------->>>>>\(webService!)") self.dev_Info_Array = webService as! NSArray print("-------->>>>>\(self.dev_Info_Array!)") self.deviceId = webService!.valueForKey("dev_id")!.objectAtIndex(0) as! Int self.mac = webService!.valueForKey("al_mac")!.objectAtIndex(0) as! String self.sn = webService!.valueForKey("sn")!.objectAtIndex(0) as! String print("deviceId :\(self.deviceId)") print("mac :\(self.mac)") print("sn :\(self.sn)") } // self.spinner.hidden = true } @IBAction func firmwareUpgradeBtnClk(sender: UIButton) { self.serverRequestFirmwateUpdate() // self.simulateFirmwareUpdate(self.url,requestMethodType: "post") } func simulateFirmwareUpdate(url:String,requestMethodType:String) { // let postString = String(format: "token=%@",self.appdel.token) // // self.appdel.baseURL = url // // var tempURL : String = "" // // tempURL = String(format: "%@%@",url,"api/upgrade") // // print("upgrade URL :\(tempURL)") // // let paramString:String = postString // var methodType : String // var httpMethodName:String // let myRequest:String = String() // methodType = requestMethodType // httpMethodName = "api/deviceinfo" // self.UploadRequest(tempURL) //self.upgradingDeviceAPI() self.myImageUploadRequest() /* var webService:AnyObject? webService = myRequest.dataRequest( myRequest.baseURL(), param:paramString , httpMethodTyp:methodType , httpMethodName:httpMethodName )*/ // self.spinner.hidden = true // print("-------->>>>>\(webService!)") //let headers = [ // "content-type": "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW", // "cache-control": "no-cache", // "postman-token": "c00027af-accf-6b7a-20f1-8fa07b4c64ef" // ] // let parameters = [ // [ // "name": "token", // "value": self.appdel.token // ], // [ // "name": "file", // "fileName": "wave2.cig.3.1.00.B020.upgrade1 (1).img" // ], // [ // "name": "auto_reboot", // "value": "false" // ], // [ // "name": "devices", // "value": "{ \"devices\":[ { \"id\":1, \"mac\":\"00:19:C7:01:56:0F\", \"sn\":\"77863370\" } ] }" // ] // ] // let boundary = "----WebKitFormBoundary7MA4YWxkTrZu0gW" // // var body = "" // var error: NSError? = nil // for param in parameters { // let paramName = param["name"]! // body += "--\(boundary)\r\n" // body += "Content-Disposition:form-data; name=\"\(paramName)\"" // if let filename = param["fileName"] { // let contentType = param["content-type"]! // let fileContent = try? String(contentsOfFile: filename, encoding: NSUTF8StringEncoding) // if (error != nil) { // print(error) // } // body += "; filename=\"\(filename)\"\r\n" // body += "Content-Type: \(contentType)\r\n\r\n" // body += fileContent! // } else if let paramValue = param["value"] { // body += "\r\n\r\n\(paramValue)" // } // } //data_request } func UploadRequest(tepurl: String) { let url = NSURL(string: tepurl) let request = NSMutableURLRequest(URL: url!) request.HTTPMethod = "POST" var tempDict : NSMutableDictionary! = NSMutableDictionary() tempDict = deviceDict(self.deviceId,mac:self.mac ,sn:self.sn) print("new dict : \(tempDict)") var deviceJsonString : String = "" do { let jsonData : NSData = try! NSJSONSerialization.dataWithJSONObject(tempDict, options: NSJSONWritingOptions.PrettyPrinted) //Convert back to string. Usually only do this for debugging if let JSONString = String(data: jsonData, encoding: NSUTF8StringEncoding) { deviceJsonString = JSONString print("json \(deviceJsonString)") } }catch { print("Error") } let boundary = generateBoundaryString() request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type") let bundle = NSBundle.mainBundle() let path = bundle.pathForResource("wave2.CIG.yes.ap180.enable.R3.1.00.B020", ofType: "") let stringData = path!.dataUsingEncoding(NSUTF16StringEncoding) let body = NSMutableData() let parameters = [ [ "name": "token", "value": self.appdel.token ], [ "name": "file", "fileName": path ], [ "name": "auto_reboot", "value": "false" ], [ "name": "devices", "value": deviceJsonString ] ] print(">>>> Parameters >>>>>>>>\(parameters)") let stringDataParmeter = String(parameters).dataUsingEncoding(NSUTF16StringEncoding) body.appendData("--\(boundary)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) body.appendData("Content-Disposition:form-data; name=\"test\"\r\n\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) body.appendData("hi\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) body.appendData("--\(boundary)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) body.appendData(stringData!) body.appendData(stringDataParmeter!) body.appendData("\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) body.appendData("--\(boundary)--\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) request.HTTPBody = body let session = NSURLSession.sharedSession() let task = session.dataTaskWithRequest(request) { ( let data, let response, let error) in guard let _:NSData = data, let _:NSURLResponse = response where error == nil else { print("error") return } let dataString = NSString(data: data!, encoding: NSUTF8StringEncoding) print(">>>>>>>>>>>data string >>>>\(dataString)") } task.resume() } // upgrade device API cal /* func UploadRequest() { let url = NSURL(string: "http://192.168.7.43/api/upgrade") let request = NSMutableURLRequest(URL: url!) request.HTTPMethod = "POST" let boundary = generateBoundaryString() //define the multipart request type request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type") let body = NSMutableData() let fname = "test.png" let mimetype = "image/png" //define the data post parameter body.appendData("--\(boundary)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) body.appendData("Content-Disposition:form-data; name=\"test\"\r\n\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) body.appendData("hi\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) body.appendData("--\(boundary)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) body.appendData("Content-Disposition:form-data; name=\"file\"; filename=\"\(fname)\"\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) body.appendData("Content-Type: \(mimetype)\r\n\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) body.appendData(image_data!) body.appendData("\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) body.appendData("--\(boundary)--\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) request.HTTPBody = body let session = NSURLSession.sharedSession() let task = session.dataTaskWithRequest(request) { ( let data, let response, let error) in guard let _:NSData = data, let _:NSURLResponse = response where error == nil else { print("error") return } let dataString = NSString(data: data!, encoding: NSUTF8StringEncoding) print(dataString) } task.resume() } func generateBoundaryString() -> String { return "Boundary-\(NSUUID().UUIDString)" } */ /* func api(filePath:String?) { let headers = [ "content-type": "multipart/form-data; boundary===WebKitFormBoundary7MA4YWxkTrZu0gW===", "User-Agent": "CodeJava Agent", "Test" : "Bonjour" ] let parameters = [ [ "name": "token", "value": appdel.token ], [ "name": "file", "fileName": filePath ], [ "name": "auto_reboot", "value": "false" ], [ "name": "devices", "value": "{ \"devices\":[ { \"id\":2, \"mac\":\"00:69:38:2A:16:B7\", \"sn\":\"B0274976\" } ] }" ] ] let boundary = "----WebKitFormBoundary7MA4YWxkTrZu0gW" var body = String() var error: NSError? = nil for param in parameters { let paramName = param["name"]! body += "--\(boundary)\r\n" body += "Content-Disposition:form-data; name=\"\(paramName!)\"" if let filename = param["fileName"] { let contentType = "multipart/form-data" var fileContent = String() do { fileContent = try String(contentsOfFile: filename!, encoding: NSUTF8StringEncoding) } catch {/* error handling here */} if (error != nil) { print(error) } body += "; filename=\"\(filename!)\"\r\n" body += "Content-Type: \(contentType)\r\n\r\n" body += fileContent } else if let paramValue = param["value"] { body += "\r\n\r\n\(paramValue! )" } print(body) } let postData = body.dataUsingEncoding(NSUTF8StringEncoding)! let request = NSMutableURLRequest(URL: NSURL(string: "http://192.168.7.43/api/upgrade")!) request.HTTPMethod = "POST" request.allHTTPHeaderFields = headers request.HTTPBody = postData as NSData let session = NSURLSession.sharedSession() let task = session.dataTaskWithRequest(request) { ( let data, let response, let error) in guard let _:NSData = data, let _:NSURLResponse = response where error == nil else { print("error") return } let dataString = NSString(data: data!, encoding: NSUTF8StringEncoding) print(dataString!) } task.resume() }*/ func upgradingDeviceAPI(){ let bundle = NSBundle.mainBundle() let path = bundle.pathForResource("wave2.CIG.yes.ap180.enable.R3.1.00.B020", ofType: "") // print(NSData.init(contentsOfFile: path!)) let parameters = [["name": "token","value": appdel.token],["name": "file","fileName": "wave2.CIG.yes.ap180.enable.R3.1.00.B020"],["name": "auto_reboot","value": "false"], ["name": "devices","value": "{ \"devices\":[ { \"id\":2, \"mac\":\"00:69:38:2A:16:B7\", \"sn\":\"B0274976\" } ] }"]] let boundary = "----WebKitFormBoundary7MA4YWxkTrZu0gW" var body = "" let error: NSError? = nil for param in parameters { let paramName = param["name"]! // body += "--\(boundary)\r\n" // body += "Content-Disposition:form-data; name=\"\(paramName)\"" if let filename = param["fileName"] { let contentType = "multipart/form-data" //param["content-type"] var fileContent = String() do { // fileContent = try String(contentsOfFile: path!, encoding: NSUTF8StringEncoding) } catch {/* error handling here */} if (error != nil) { print(error) } body += "; file=\"\(filename)\"\r\n" // body += "Content-Type: \(contentType)\r\n\r\n" body += fileContent } else if let paramValue = param["value"] { body += "\r\n\r\n\(paramValue)" } } print("final body ====>>>>>\(body)") let postData = body.dataUsingEncoding(NSUTF8StringEncoding)! as! NSMutableData let request = NSMutableURLRequest(URL: NSURL(string: "http://192.168.7.43/api/upgrade")!) request.HTTPMethod = "POST" let headers = [ "content-type": "multipart/form-data; ----WebKitFormBoundary7MA4YWxkTrZu0gW", "cache-control": "no-cache", ] request.allHTTPHeaderFields = headers postData.appendData(NSData.init(contentsOfFile: path!)!) request.HTTPBody = postData as NSData // request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type") // request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type") let session = NSURLSession.sharedSession() let task = session.dataTaskWithRequest(request) { ( let data, let response, let error) in guard let _:NSData = data, let _:NSURLResponse = response where error == nil else { print("error") return } let dataString = NSString(data: data!, encoding: NSUTF8StringEncoding) print(dataString!) } task.resume() } func generateBoundaryString() -> String { return "Boundary-\(NSUUID().UUIDString)" } // func data_request(tepurl :String) // { // let bundle = NSBundle.mainBundle() // let path = bundle.pathForResource("wave2.CIG.yes.ap180.enable.R3.1.00.B020", ofType: "") // let url:NSURL = NSURL(string:tepurl )! // let session = NSURLSession.sharedSession() // // let request = NSMutableURLRequest(URL: url) // request.HTTPMethod = "POST" // request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringCacheData // // let parameters = [ // [ // "name": "token", // "value": self.appdel.token // ], // [ // "name": "file", // "fileName": path // ], // [ // "name": "auto_reboot", // "value": "false" // ], // [ // "name": "devices", // "value": "{ \"devices\":[ { \"id\":1, \"mac\":\"00:19:C7:01:56:0F\", \"sn\":\"77863370\" } ] }" // ] // ] // // request.HTTPBody = String(parameters).dataUsingEncoding(NSUTF8StringEncoding) // // let task = session.dataTaskWithRequest(request) { // ( // let data, let response, let error) in // // guard let _:NSData = data, let _:NSURLResponse = response where error == nil else { // print("error") // return // } // // let dataString = NSString(data: data!, encoding: NSUTF8StringEncoding) // print(dataString) // // } // // task.resume() // // } func deviceDict(id:Int,mac:String,sn:String) -> NSMutableDictionary { var dict : NSMutableDictionary = NSMutableDictionary() var Arr :NSMutableArray = NSMutableArray() var finaldict : NSMutableDictionary = NSMutableDictionary() dict.setValue(id, forKey: "id") dict.setValue(mac, forKey: "mac") dict.setValue(sn, forKey: "sn") Arr.addObject(dict) finaldict.setValue(Arr, forKey: "devices") return finaldict } func myImageUploadRequest() { let bundle = NSBundle.mainBundle() let path = bundle.pathForResource("wave2.CIG.yes.ap180.enable.R3.1.00.B020", ofType: "") let myUrl = NSURL(string: "http://192.168.7.43/api/upgrade"); //let myUrl = NSURL(string: "http://www.boredwear.com/utils/postImage.php"); let request = NSMutableURLRequest(URL:myUrl!); request.HTTPMethod = "POST"; let param = ["name": "token","value": appdel.token,"name1": "file","fileName": "wave2.CIG.yes.ap180.enable.R3.1.00.B020","name2": "auto_reboot","value1": "false", "name3": "devices","value2": ""] let boundary = generateBoundaryString() request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type") let fileData = NSData.init(contentsOfFile: path!) request.HTTPBody = createBodyWithParameters(param, filePathKey: "file", imageDataKey: fileData!, boundary: boundary) let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in if error != nil { print("error=\(error)") return } // You can print out response object print("******* response = \(response)") // Print out reponse body let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding) print("****** response data = \(responseString!)") do { let json = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? NSDictionary print(json) dispatch_async(dispatch_get_main_queue(),{ }); }catch { print(error) } } task.resume() } func createBodyWithParameters(parameters: [String: String!]!, filePathKey: String?, imageDataKey: NSData, boundary: String) -> NSData { let body = NSMutableData(); if parameters != nil { for (key, value) in parameters! { body.appendString("--\(boundary)\r\n") body.appendString("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n") body.appendString("\(value)\r\n") } } // let filename = "user-profile.jpg" //let mimetype = "image/jpg" body.appendString("--\(boundary)\r\n") body.appendString("Content-Disposition: form-data; name=\"") // body.appendString("Content-Type: \(mimetype)\r\n\r\n") body.appendData(imageDataKey) body.appendString("\r\n") body.appendString("--\(boundary)--\r\n") return body } } extension NSMutableData { func appendString(string: String) { let data = string.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true) appendData(data!) } }