AutorÃa | Ultima modificación | Ver Log |
//
// SyncAdapter.swift
// twogetskills
//
// Created by Efrain Yanez Recanatini on 2/24/22.
//
import Foundation
import Foundation
import Alamofire
import SwiftyJSON
class SyncAdapter
{
var syncDao = SyncDao()
var inProgress = false;
@objc func updateTimer() {
//print("updateTimer")
if inProgress {
return
}
inProgress = true
let myQue = DispatchQueue(label: "syncQue")
myQue.async {
self.sync{ success in
self.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 = false
registerDevice(record: recordSync)
}
else if availableForOtherOperation && recordSync.type == Constants.SYNC_ADAPTER_TYPE_FCM {
availableForOtherOperation = false
registerFcm(record: recordSync)
}
else if availableForOtherOperation && recordSync.type == Constants.SYNC_ADAPTER_TYPE_SYNC {
availableForOtherOperation = false
sendSync(record: recordSync)
}
else if recordSync.data.isEmpty {
syncDao.remove(id: recordSync.id)
}
}
}
completionHandler(true)
}
func sendSync(record: SyncModel)
{
let preference = Preference.sharedInstance
let 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 in
print("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") ?? 0
if sync_id > 0 {
self.syncDao.remove(id: sync_id)
}
}
break
case .failure:
print("JSON = \(String(describing: Error.self))")
break
}
}
}
func registerFcm(record: SyncModel) {
let preference = Preference.sharedInstance
let deviceUuid = preference.deviceUuid
let 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 in
print("Send FCM")
switch response.result {
case .success:
let result = try? JSON(data: response.data!)
let sync_id = Int(result?["data"]["sync_id"].stringValue ?? "0") ?? 0
if sync_id > 0 {
self.syncDao.remove(id: sync_id)
}
break
case .failure:
print("JSON = \(String(describing: Error.self))")
break
}
}
}
func registerDevice(record: SyncModel)
{
let version = UIDevice.current.systemVersion
let model = UIDevice.current.localizedModel
let 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 in
print("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.sharedInstance
preference.aes = aes
preference.password = password
preference.save()
}
let sync_id = Int(result?["data"]["sync_id"].stringValue ?? "0") ?? 0
if sync_id > 0 {
self.syncDao.remove(id: sync_id)
}
}
break
case .failure:
print("JSON = \(String(describing: Error.self))")
break
}
}
}
}