Skip to content

Commit 82dfb30

Browse files
author
“Akshay
committed
[MOB-11252] - Sequential accessing EM
Using DispatchQueue when setting and reading the messages.
1 parent f4292ff commit 82dfb30

File tree

1 file changed

+23
-8
lines changed

1 file changed

+23
-8
lines changed

swift-sdk/Internal/IterableEmbeddedManager.swift

+23-8
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,19 @@ 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+
cleanUpTrackedMessageIds(messages)
202+
}
192203
}
193204

194205
private func cleanUpTrackedMessageIds(_ currentMessages: [Int: [IterableEmbeddedMessage]]) {
195206
let currentUniqueKeys = Set(currentMessages.flatMap { placement, messages in
196207
messages.map { "\(placement)-\($0.metadata.messageId)" }
197208
})
198-
trackedMessageIds = trackedMessageIds.intersection(currentUniqueKeys)
209+
messageProcessingQueue.sync {
210+
trackedMessageIds = trackedMessageIds.intersection(currentUniqueKeys)
211+
}
199212
}
200213

201214
private func trackNewlyRetrieved(_ processor: EmbeddedMessagingProcessor) {
@@ -204,9 +217,11 @@ class IterableEmbeddedManager: NSObject, IterableInternalEmbeddedManagerProtocol
204217
let messageId = message.metadata.messageId
205218
let uniqueKey = "\(placementId)-\(messageId)"
206219

207-
if !trackedMessageIds.contains(uniqueKey) {
208-
IterableAPI.track(embeddedMessageReceived: message)
209-
trackedMessageIds.insert(uniqueKey)
220+
messageProcessingQueue.sync {
221+
if !trackedMessageIds.contains(uniqueKey) {
222+
IterableAPI.track(embeddedMessageReceived: message)
223+
trackedMessageIds.insert(uniqueKey)
224+
}
210225
}
211226
}
212227
}

0 commit comments

Comments
 (0)