Skip to content

Commit 4a38aaa

Browse files
authored
Merge pull request #515 from timkimadobe/unrevert-481-2
Unrevert #481 - "Make EdgeEventHandles and completionHandlers..."
2 parents 1754e70 + 8520fb2 commit 4a38aaa

File tree

1 file changed

+30
-16
lines changed

1 file changed

+30
-16
lines changed

Sources/EdgeNetworkHandlers/CompletionHandlersManager.swift

Lines changed: 30 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,12 @@ import Foundation
1515

1616
class CompletionHandlersManager {
1717
private let TAG = "CompletionHandlersManager"
18-
private var completionHandlers =
19-
ThreadSafeDictionary<String, (([EdgeEventHandle]) -> Void)>(identifier: "com.adobe.edge.completionHandlers")
20-
18+
private var completionHandlers = [String: (([EdgeEventHandle]) -> Void)]()
2119
// edge response handles for a event request id (key)
22-
private var edgeEventHandles =
23-
ThreadSafeDictionary<String, [EdgeEventHandle]>(identifier: "com.adobe.edge.edgeHandlesList")
20+
private var edgeEventHandles = [String: [EdgeEventHandle]]()
2421

2522
static let shared = CompletionHandlersManager()
23+
private let queue = DispatchQueue(label: "com.adobe.edge.completionHandlersManager.queue")
2624

2725
/// Registers a completion handler for the specified `requestEventId`. This handler is invoked when the Edge response content has been
2826
/// handled entirely by the Edge extension, containing a list of `EdgeEventHandle`(s). This list can be empty or can contain one or multiple items
@@ -38,8 +36,14 @@ class CompletionHandlersManager {
3836
return
3937
}
4038

41-
Log.trace(label: TAG, "Registering completion handler for Edge response with request event id \(forRequestEventId).")
42-
completionHandlers[forRequestEventId] = unwrappedCompletion
39+
queue.async { [weak self] in
40+
41+
guard let self = self else { return }
42+
43+
Log.trace(label: TAG, "Registering completion handler for Edge response with request event id \(forRequestEventId).")
44+
completionHandlers[forRequestEventId] = unwrappedCompletion
45+
}
46+
4347
}
4448

4549
/// Calls the registered completion handler (if any) with the collected `EdgeEventHandle`(s). After this operation,
@@ -48,13 +52,20 @@ class CompletionHandlersManager {
4852
func unregisterCompletionHandler(forRequestEventId: String) {
4953
guard !forRequestEventId.isEmpty else { return }
5054

51-
if let completionHandler = completionHandlers[forRequestEventId] {
52-
completionHandler(edgeEventHandles[forRequestEventId] ?? [])
53-
_ = completionHandlers.removeValue(forKey: forRequestEventId)
54-
Log.trace(label: TAG, "Removing completion handler for Edge response with request event id \(forRequestEventId).")
55+
queue.async { [weak self] in
56+
57+
guard let self = self else { return }
58+
59+
if let completionHandler = completionHandlers[forRequestEventId] {
60+
completionHandler(edgeEventHandles[forRequestEventId] ?? [])
61+
62+
Log.trace(label: TAG, "Removing completion handler for Edge response with request event id \(forRequestEventId).")
63+
completionHandlers.removeValue(forKey: forRequestEventId)
64+
}
65+
66+
edgeEventHandles.removeValue(forKey: forRequestEventId)
5567
}
5668

57-
_ = edgeEventHandles.removeValue(forKey: forRequestEventId)
5869
}
5970

6071
/// Updates the list of `EdgeEventHandle`(s) for current `requestEventId`.
@@ -63,10 +74,13 @@ class CompletionHandlersManager {
6374
/// - eventHandle: newly received event handle
6475
func eventHandleReceived(forRequestEventId: String?, _ eventHandle: EdgeEventHandle) {
6576
guard let unwrappedRequestEventId = forRequestEventId, !unwrappedRequestEventId.isEmpty else { return }
66-
if edgeEventHandles[unwrappedRequestEventId] != nil {
67-
edgeEventHandles[unwrappedRequestEventId]?.append(eventHandle)
68-
} else {
69-
edgeEventHandles[unwrappedRequestEventId] = [eventHandle]
77+
78+
queue.async {[weak self] in
79+
80+
guard let self = self else { return }
81+
82+
edgeEventHandles[unwrappedRequestEventId, default: []].append(eventHandle)
7083
}
84+
7185
}
7286
}

0 commit comments

Comments
 (0)