From 01dbb8b1b62844b8f472f032aa10ce1fb92a431c Mon Sep 17 00:00:00 2001 From: Laurent Date: Thu, 12 Dec 2024 14:06:41 +0100 Subject: [PATCH] Adds deviceId to sync POST request --- LeStorage/Services.swift | 10 +++++++--- LeStorage/StoreCenter.swift | 3 ++- LeStorage/WebSocketManager.swift | 16 ++++++++-------- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/LeStorage/Services.swift b/LeStorage/Services.swift index 44e308b..e5e14ef 100644 --- a/LeStorage/Services.swift +++ b/LeStorage/Services.swift @@ -293,7 +293,8 @@ public class Services { operation: apiCall.method.rawValue, modelName: modelName, data: object, - storeId: object.getStoreId()) + storeId: object.getStoreId(), + deviceId: StoreCenter.main.deviceId()) request.httpBody = try JSON.encoder.encode(payload) } else { @@ -393,7 +394,8 @@ public class Services { let payload = SyncPayload( operation: method.rawValue, modelName: String(describing: T.self), - data: instance) + data: instance, + deviceId: StoreCenter.main.deviceId()) let syncRequest = try self._baseSyncRequest(method: .post, payload: payload) return try await self._runRequest(syncRequest) @@ -409,7 +411,8 @@ public class Services { let payload = SyncPayload( operation: method.rawValue, modelName: String(describing: T.self), - data: instance) + data: instance, + deviceId: StoreCenter.main.deviceId()) let syncRequest = try self._baseSyncRequest(method: .post, payload: payload) return try await self._runRequest(syncRequest) @@ -648,6 +651,7 @@ struct SyncPayload: Encodable { var modelName: String var data: T var storeId: String? + var deviceId: String? } struct ErrorMessage { diff --git a/LeStorage/StoreCenter.swift b/LeStorage/StoreCenter.swift index 9e0a335..4194f04 100644 --- a/LeStorage/StoreCenter.swift +++ b/LeStorage/StoreCenter.swift @@ -64,8 +64,9 @@ public class StoreCenter { NetworkMonitor.shared.onConnectionEstablished = { self._resumeApiCalls() - self._configureWebSocket() +// self._configureWebSocket() } + Logger.log("device Id = \(self.deviceId())") } public func configureURLs(secureScheme: Bool, domain: String) { diff --git a/LeStorage/WebSocketManager.swift b/LeStorage/WebSocketManager.swift index c31981e..0ee81f8 100644 --- a/LeStorage/WebSocketManager.swift +++ b/LeStorage/WebSocketManager.swift @@ -54,12 +54,14 @@ class WebSocketManager: ObservableObject { case .failure(let error): print("Error in receiving message: \(error)") self._handleWebSocketError(error) - -// self._setupWebSocket() case .success(let message): switch message { - case .string(let text): - print("Received text: \(text)") + case .string(let deviceId): + print("device id = \(StoreCenter.main.deviceId()), origin id: \(deviceId)") + guard StoreCenter.main.deviceId() != deviceId else { + break + } + Task { do { try await StoreCenter.main.synchronizeLastUpdates() @@ -68,9 +70,6 @@ class WebSocketManager: ObservableObject { } } -// DispatchQueue.main.async { -// self.messages.append(text) -// } case .data(let data): print("Received binary message: \(data)") break @@ -108,7 +107,8 @@ class WebSocketManager: ObservableObject { private func _ping() { self._webSocketTask?.sendPing { error in - +// Logger.log("ping sent. Error?: \(error?.localizedDescription ?? "none") ") + if let error: NSError = error as NSError?, error.domain == NSPOSIXErrorDomain && error.code == 57 { self._setupWebSocket()