Emcee
42 строки · 1.2 Кб
1import CLTExtensions
2import Foundation
3import LogStreamingModels
4import SocketModels
5import QueueModels
6
7public final class ClientDetailsHolderImpl: ClientDetailsHolder {
8private var unsafeKnownClientDetails = Set<ClientDetails>()
9private var unsafeClientDetailsByBucketId = [BucketId: ClientDetails]()
10private let lock = NSLock()
11
12public init() {}
13
14public func associate(bucketId: BucketId, clientDetails: ClientDetails) {
15lock.whileLocked {
16unsafeClientDetailsByBucketId[bucketId] = clientDetails
17unsafeKnownClientDetails.insert(clientDetails)
18}
19}
20
21public func clientDetails(bucketId: BucketId) -> ClientDetails? {
22lock.whileLocked {
23unsafeClientDetailsByBucketId[bucketId]
24}
25}
26
27public func forget(clientDetails: ClientDetails) {
28lock.whileLocked {
29unsafeClientDetailsByBucketId = unsafeClientDetailsByBucketId.filter { item in
30item.value != clientDetails
31}
32
33unsafeKnownClientDetails.remove(clientDetails)
34}
35}
36
37public var knownClientDetails: Set<ClientDetails> {
38lock.whileLocked {
39unsafeKnownClientDetails
40}
41}
42}
43