Proyectos de Subversion Iphone Microlearning

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
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
}