1 |
efrain |
1 |
//
|
|
|
2 |
// SyncAdapter.swift
|
|
|
3 |
// twogetskills
|
|
|
4 |
//
|
|
|
5 |
// Created by Efrain Yanez Recanatini on 2/24/22.
|
|
|
6 |
//
|
|
|
7 |
|
|
|
8 |
import Foundation
|
|
|
9 |
|
|
|
10 |
import Foundation
|
|
|
11 |
import Alamofire
|
|
|
12 |
import SwiftyJSON
|
|
|
13 |
|
|
|
14 |
class SyncAdapter
|
|
|
15 |
{
|
|
|
16 |
|
|
|
17 |
var syncDao = SyncDao()
|
|
|
18 |
var inProgress = false;
|
|
|
19 |
|
|
|
20 |
@objc func updateTimer() {
|
|
|
21 |
//print("updateTimer")
|
|
|
22 |
|
|
|
23 |
if inProgress {
|
|
|
24 |
return
|
|
|
25 |
}
|
|
|
26 |
|
|
|
27 |
inProgress = true
|
|
|
28 |
let myQue = DispatchQueue(label: "syncQue")
|
|
|
29 |
myQue.async {
|
|
|
30 |
self.sync{ success in
|
|
|
31 |
self.inProgress = false;
|
|
|
32 |
}
|
|
|
33 |
}
|
|
|
34 |
}
|
|
|
35 |
|
|
|
36 |
func sync(completionHandler : @escaping (_ success : Bool) -> Void) {
|
|
|
37 |
let recordsSync = self.syncDao.selectBatch()
|
|
|
38 |
|
|
|
39 |
if recordsSync.count > 0 {
|
|
|
40 |
var availableForOtherOperation = true;
|
|
|
41 |
for recordSync in recordsSync
|
|
|
42 |
{
|
|
|
43 |
print(recordSync)
|
|
|
44 |
|
|
|
45 |
if recordSync.type == Constants.SYNC_ADAPTER_TYPE_DEVICE {
|
|
|
46 |
availableForOtherOperation = false
|
|
|
47 |
registerDevice(record: recordSync)
|
|
|
48 |
}
|
|
|
49 |
else if availableForOtherOperation && recordSync.type == Constants.SYNC_ADAPTER_TYPE_FCM {
|
|
|
50 |
availableForOtherOperation = false
|
|
|
51 |
registerFcm(record: recordSync)
|
|
|
52 |
}
|
|
|
53 |
else if availableForOtherOperation && recordSync.type == Constants.SYNC_ADAPTER_TYPE_SYNC {
|
|
|
54 |
availableForOtherOperation = false
|
|
|
55 |
sendSync(record: recordSync)
|
|
|
56 |
}
|
|
|
57 |
else if recordSync.data.isEmpty {
|
|
|
58 |
syncDao.remove(id: recordSync.id)
|
|
|
59 |
}
|
|
|
60 |
}
|
|
|
61 |
}
|
|
|
62 |
completionHandler(true)
|
|
|
63 |
}
|
|
|
64 |
|
|
|
65 |
func sendSync(record: SyncModel)
|
|
|
66 |
{
|
|
|
67 |
let preference = Preference.sharedInstance
|
|
|
68 |
let parameters = [
|
|
|
69 |
Constants.POST_SYNC_FIELD_DEVICE_UUID: "\(preference.deviceUuid)",
|
|
|
70 |
Constants.POST_SYNC_FIELD_DATA: "\(record.data)",
|
|
|
71 |
Constants.POST_SYNC_FIELD_SYNC_ID: "\(record.id)"
|
|
|
72 |
]
|
|
|
73 |
let headers: HTTPHeaders = [
|
|
|
74 |
.accept(Constants.HTTP_HEADER_ACCEPT)
|
|
|
75 |
]
|
|
|
76 |
|
|
|
77 |
AF.request(Config.URL_SYNC, method: .post, parameters: parameters, encoding: URLEncoding.default, headers: headers).responseJSON {response in
|
|
|
78 |
|
|
|
79 |
print("Send Sync ")
|
|
|
80 |
|
|
|
81 |
switch response.result {
|
|
|
82 |
case .success:
|
|
|
83 |
let result = try? JSON(data: response.data!)
|
|
|
84 |
if result?["success"] ?? "" != false{
|
|
|
85 |
let sync_id = Int(result?["data"]["sync_id"].stringValue ?? "0") ?? 0
|
|
|
86 |
if sync_id > 0 {
|
|
|
87 |
self.syncDao.remove(id: sync_id)
|
|
|
88 |
}
|
|
|
89 |
}
|
|
|
90 |
break
|
|
|
91 |
case .failure:
|
|
|
92 |
print("JSON = \(String(describing: Error.self))")
|
|
|
93 |
break
|
|
|
94 |
}
|
|
|
95 |
}
|
|
|
96 |
}
|
|
|
97 |
|
|
|
98 |
func registerFcm(record: SyncModel) {
|
|
|
99 |
let preference = Preference.sharedInstance
|
|
|
100 |
let deviceUuid = preference.deviceUuid
|
|
|
101 |
let parameters = [
|
|
|
102 |
Constants.POST_FCM_FIELD_APPLICATION_ID: "\(Constants.GLOBAL_APPLICATION_ID)",
|
|
|
103 |
Constants.POST_FCM_FIELD_DEVICE_UUID: "\(deviceUuid)",
|
|
|
104 |
Constants.POST_FCM_FIELD_TOKEN: "\(record.data)",
|
|
|
105 |
Constants.POST_FCM_FIELD_SYNC_ID: "\(record.id)"
|
|
|
106 |
]
|
|
|
107 |
|
|
|
108 |
let headers: HTTPHeaders = [
|
|
|
109 |
.accept(Constants.HTTP_HEADER_ACCEPT)
|
|
|
110 |
]
|
|
|
111 |
|
|
|
112 |
AF.request(Config.URL_FCM, method: .post, parameters: parameters, encoding: URLEncoding.default, headers: headers).responseJSON{response in
|
|
|
113 |
|
|
|
114 |
print("Send FCM")
|
|
|
115 |
|
|
|
116 |
switch response.result {
|
|
|
117 |
case .success:
|
|
|
118 |
let result = try? JSON(data: response.data!)
|
|
|
119 |
let sync_id = Int(result?["data"]["sync_id"].stringValue ?? "0") ?? 0
|
|
|
120 |
if sync_id > 0 {
|
|
|
121 |
self.syncDao.remove(id: sync_id)
|
|
|
122 |
}
|
|
|
123 |
break
|
|
|
124 |
case .failure:
|
|
|
125 |
print("JSON = \(String(describing: Error.self))")
|
|
|
126 |
break
|
|
|
127 |
}
|
|
|
128 |
}
|
|
|
129 |
}
|
|
|
130 |
|
|
|
131 |
|
|
|
132 |
func registerDevice(record: SyncModel)
|
|
|
133 |
{
|
|
|
134 |
|
|
|
135 |
let version = UIDevice.current.systemVersion
|
|
|
136 |
let model = UIDevice.current.localizedModel
|
|
|
137 |
|
|
|
138 |
|
|
|
139 |
let parameters = [
|
|
|
140 |
Constants.POST_DEVICE_FIELD_APPLICATION_ID: "1",
|
|
|
141 |
Constants.POST_DEVICE_FIELD_DEVICE_UUID: "\(record.data)",
|
|
|
142 |
Constants.POST_DEVICE_FIELD_MANUFACTURER: "Apple",
|
|
|
143 |
Constants.POST_DEVICE_FIELD_BRAND: "Apple",
|
|
|
144 |
Constants.POST_DEVICE_FIELD_VERSION: "\(version)",
|
|
|
145 |
Constants.POST_DEVICE_FIELD_MODEL: "\(model)",
|
|
|
146 |
Constants.POST_DEVICE_FIELD_PLATFORM: "Iphone",
|
|
|
147 |
Constants.POST_DEVICE_FIELD_SYNC_ID: "\(record.id)"
|
|
|
148 |
]
|
|
|
149 |
|
|
|
150 |
let headers: HTTPHeaders = [
|
|
|
151 |
.accept(Constants.HTTP_HEADER_ACCEPT)
|
|
|
152 |
]
|
|
|
153 |
|
|
|
154 |
|
|
|
155 |
print("URL DEVICE : \(Config.URL_DEVICE) ")
|
|
|
156 |
|
|
|
157 |
AF.request(Config.URL_DEVICE, method: .post, parameters: parameters, encoding: URLEncoding.default, headers: headers).responseJSON {response in
|
|
|
158 |
|
|
|
159 |
print("Send Device: ")
|
|
|
160 |
|
|
|
161 |
switch response.result {
|
|
|
162 |
case .success:
|
|
|
163 |
let result = try? JSON(data: response.data!)
|
|
|
164 |
if result?["success"] ?? "" != false {
|
|
|
165 |
let aes = result?["data"]["aes"].stringValue ?? ""
|
|
|
166 |
let password = result?["data"]["password"].stringValue ?? ""
|
|
|
167 |
|
|
|
168 |
if !aes.isEmpty && !password.isEmpty {
|
|
|
169 |
|
|
|
170 |
let preference = Preference.sharedInstance
|
|
|
171 |
preference.aes = aes
|
|
|
172 |
preference.password = password
|
|
|
173 |
preference.save()
|
|
|
174 |
}
|
|
|
175 |
|
|
|
176 |
let sync_id = Int(result?["data"]["sync_id"].stringValue ?? "0") ?? 0
|
|
|
177 |
if sync_id > 0 {
|
|
|
178 |
self.syncDao.remove(id: sync_id)
|
|
|
179 |
}
|
|
|
180 |
}
|
|
|
181 |
break
|
|
|
182 |
case .failure:
|
|
|
183 |
print("JSON = \(String(describing: Error.self))")
|
|
|
184 |
break
|
|
|
185 |
}
|
|
|
186 |
}
|
|
|
187 |
}
|
|
|
188 |
}
|