Skip to content

Commit 8e9edf6

Browse files
Ayyanchira“Akshay
andauthored
[MOB-11252] - Sequential accessing EM (#912)
Co-authored-by: “Akshay <“[email protected]”>
1 parent f4292ff commit 8e9edf6

File tree

1 file changed

+26
-8
lines changed

1 file changed

+26
-8
lines changed

swift-sdk/Internal/IterableEmbeddedManager.swift

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,19 @@ class IterableEmbeddedManager: NSObject, IterableInternalEmbeddedManagerProtocol
3838
}
3939

4040
public func getMessages() -> [IterableEmbeddedMessage] {
41-
return Array(messages.values.flatMap { $0 })
41+
var result: [IterableEmbeddedMessage] = []
42+
messageProcessingQueue.sync {
43+
result = Array(messages.values.flatMap { $0 })
44+
}
45+
return result
4246
}
4347

4448
public func getMessages(for placementId: Int) -> [IterableEmbeddedMessage] {
45-
return messages[placementId] ?? []
49+
var result: [IterableEmbeddedMessage] = []
50+
messageProcessingQueue.sync {
51+
result = messages[placementId] ?? []
52+
}
53+
return result
4654
}
4755

4856
public func addUpdateListener(_ listener: IterableEmbeddedUpdateDelegate) {
@@ -130,6 +138,7 @@ class IterableEmbeddedManager: NSObject, IterableInternalEmbeddedManagerProtocol
130138
private let urlOpener: UrlOpenerProtocol
131139
private let allowedProtocols: [String]
132140
private var messages: [Int: [IterableEmbeddedMessage]] = [:]
141+
private let messageProcessingQueue = DispatchQueue(label: "com.iterable.embedded.messages", qos: .userInitiated)
133142
private var listeners: NSHashTable<IterableEmbeddedUpdateDelegate> = NSHashTable(options: [.weakMemory])
134143
private var trackedMessageIds: Set<String> = Set()
135144
private var enableEmbeddedMessaging: Bool
@@ -187,15 +196,22 @@ class IterableEmbeddedManager: NSObject, IterableInternalEmbeddedManagerProtocol
187196
}
188197

189198
private func setMessages(_ processor: EmbeddedMessagingProcessor) {
190-
messages = processor.processedMessagesList()
191-
cleanUpTrackedMessageIds(messages)
199+
messageProcessingQueue.sync {
200+
messages = processor.processedMessagesList()
201+
let currentUniqueKeys = Set(messages.flatMap { placement, messages in
202+
messages.map { "\(placement)-\($0.metadata.messageId)" }
203+
})
204+
trackedMessageIds = trackedMessageIds.intersection(currentUniqueKeys)
205+
}
192206
}
193207

194208
private func cleanUpTrackedMessageIds(_ currentMessages: [Int: [IterableEmbeddedMessage]]) {
195209
let currentUniqueKeys = Set(currentMessages.flatMap { placement, messages in
196210
messages.map { "\(placement)-\($0.metadata.messageId)" }
197211
})
198-
trackedMessageIds = trackedMessageIds.intersection(currentUniqueKeys)
212+
messageProcessingQueue.sync {
213+
trackedMessageIds = trackedMessageIds.intersection(currentUniqueKeys)
214+
}
199215
}
200216

201217
private func trackNewlyRetrieved(_ processor: EmbeddedMessagingProcessor) {
@@ -204,9 +220,11 @@ class IterableEmbeddedManager: NSObject, IterableInternalEmbeddedManagerProtocol
204220
let messageId = message.metadata.messageId
205221
let uniqueKey = "\(placementId)-\(messageId)"
206222

207-
if !trackedMessageIds.contains(uniqueKey) {
208-
IterableAPI.track(embeddedMessageReceived: message)
209-
trackedMessageIds.insert(uniqueKey)
223+
messageProcessingQueue.sync {
224+
if !trackedMessageIds.contains(uniqueKey) {
225+
IterableAPI.track(embeddedMessageReceived: message)
226+
trackedMessageIds.insert(uniqueKey)
227+
}
210228
}
211229
}
212230
}

0 commit comments

Comments
 (0)