Emcee

Форк
0
/
ClientDetailsHolderImpl.swift 
42 строки · 1.2 Кб
1
import CLTExtensions
2
import Foundation
3
import LogStreamingModels
4
import SocketModels
5
import QueueModels
6

7
public final class ClientDetailsHolderImpl: ClientDetailsHolder {
8
    private var unsafeKnownClientDetails = Set<ClientDetails>()
9
    private var unsafeClientDetailsByBucketId = [BucketId: ClientDetails]()
10
    private let lock = NSLock()
11
    
12
    public init() {}
13
    
14
    public func associate(bucketId: BucketId, clientDetails: ClientDetails) {
15
        lock.whileLocked {
16
            unsafeClientDetailsByBucketId[bucketId] = clientDetails
17
            unsafeKnownClientDetails.insert(clientDetails)
18
        }
19
    }
20
    
21
    public func clientDetails(bucketId: BucketId) -> ClientDetails? {
22
        lock.whileLocked {
23
            unsafeClientDetailsByBucketId[bucketId]
24
        }
25
    }
26
    
27
    public func forget(clientDetails: ClientDetails) {
28
        lock.whileLocked {
29
            unsafeClientDetailsByBucketId = unsafeClientDetailsByBucketId.filter { item in
30
                item.value != clientDetails
31
            }
32
            
33
            unsafeKnownClientDetails.remove(clientDetails)
34
        }
35
    }
36
    
37
    public var knownClientDetails: Set<ClientDetails> {
38
        lock.whileLocked {
39
            unsafeKnownClientDetails
40
        }
41
    }
42
}
43

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.