AutorÃa | Ultima modificación | Ver Log |
//// SyncAdapter.swift// twogetskills//// Created by Efrain Yanez Recanatini on 2/24/22.//import Foundationimport Foundationimport Alamofireimport SwiftyJSONclass SyncAdapter{var syncDao = SyncDao()var inProgress = false;@objc func updateTimer() {//print("updateTimer")if inProgress {return}inProgress = truelet myQue = DispatchQueue(label: "syncQue")myQue.async {self.sync{ success inself.inProgress = false;}}}func sync(completionHandler : @escaping (_ success : Bool) -> Void) {let recordsSync = self.syncDao.selectBatch()if recordsSync.count > 0 {var availableForOtherOperation = true;for recordSync in recordsSync{print(recordSync)if recordSync.type == Constants.SYNC_ADAPTER_TYPE_DEVICE {availableForOtherOperation = falseregisterDevice(record: recordSync)}else if availableForOtherOperation && recordSync.type == Constants.SYNC_ADAPTER_TYPE_FCM {availableForOtherOperation = falseregisterFcm(record: recordSync)}else if availableForOtherOperation && recordSync.type == Constants.SYNC_ADAPTER_TYPE_SYNC {availableForOtherOperation = falsesendSync(record: recordSync)}else if recordSync.data.isEmpty {syncDao.remove(id: recordSync.id)}}}completionHandler(true)}func sendSync(record: SyncModel){let preference = Preference.sharedInstancelet parameters = [Constants.POST_SYNC_FIELD_DEVICE_UUID: "\(preference.deviceUuid)",Constants.POST_SYNC_FIELD_DATA: "\(record.data)",Constants.POST_SYNC_FIELD_SYNC_ID: "\(record.id)"]let headers: HTTPHeaders = [.accept(Constants.HTTP_HEADER_ACCEPT)]AF.request(Config.URL_SYNC, method: .post, parameters: parameters, encoding: URLEncoding.default, headers: headers).responseJSON {response inprint("Send Sync ")switch response.result {case .success:let result = try? JSON(data: response.data!)if result?["success"] ?? "" != false{let sync_id = Int(result?["data"]["sync_id"].stringValue ?? "0") ?? 0if sync_id > 0 {self.syncDao.remove(id: sync_id)}}breakcase .failure:print("JSON = \(String(describing: Error.self))")break}}}func registerFcm(record: SyncModel) {let preference = Preference.sharedInstancelet deviceUuid = preference.deviceUuidlet parameters = [Constants.POST_FCM_FIELD_APPLICATION_ID: "\(Constants.GLOBAL_APPLICATION_ID)",Constants.POST_FCM_FIELD_DEVICE_UUID: "\(deviceUuid)",Constants.POST_FCM_FIELD_TOKEN: "\(record.data)",Constants.POST_FCM_FIELD_SYNC_ID: "\(record.id)"]let headers: HTTPHeaders = [.accept(Constants.HTTP_HEADER_ACCEPT)]AF.request(Config.URL_FCM, method: .post, parameters: parameters, encoding: URLEncoding.default, headers: headers).responseJSON{response inprint("Send FCM")switch response.result {case .success:let result = try? JSON(data: response.data!)let sync_id = Int(result?["data"]["sync_id"].stringValue ?? "0") ?? 0if sync_id > 0 {self.syncDao.remove(id: sync_id)}breakcase .failure:print("JSON = \(String(describing: Error.self))")break}}}func registerDevice(record: SyncModel){let version = UIDevice.current.systemVersionlet model = UIDevice.current.localizedModellet parameters = [Constants.POST_DEVICE_FIELD_APPLICATION_ID: "1",Constants.POST_DEVICE_FIELD_DEVICE_UUID: "\(record.data)",Constants.POST_DEVICE_FIELD_MANUFACTURER: "Apple",Constants.POST_DEVICE_FIELD_BRAND: "Apple",Constants.POST_DEVICE_FIELD_VERSION: "\(version)",Constants.POST_DEVICE_FIELD_MODEL: "\(model)",Constants.POST_DEVICE_FIELD_PLATFORM: "Iphone",Constants.POST_DEVICE_FIELD_SYNC_ID: "\(record.id)"]let headers: HTTPHeaders = [.accept(Constants.HTTP_HEADER_ACCEPT)]print("URL DEVICE : \(Config.URL_DEVICE) ")AF.request(Config.URL_DEVICE, method: .post, parameters: parameters, encoding: URLEncoding.default, headers: headers).responseJSON {response inprint("Send Device: ")switch response.result {case .success:let result = try? JSON(data: response.data!)if result?["success"] ?? "" != false {let aes = result?["data"]["aes"].stringValue ?? ""let password = result?["data"]["password"].stringValue ?? ""if !aes.isEmpty && !password.isEmpty {let preference = Preference.sharedInstancepreference.aes = aespreference.password = passwordpreference.save()}let sync_id = Int(result?["data"]["sync_id"].stringValue ?? "0") ?? 0if sync_id > 0 {self.syncDao.remove(id: sync_id)}}breakcase .failure:print("JSON = \(String(describing: Error.self))")break}}}}