mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-08-17 11:00:07 +00:00
81 lines
1.7 KiB
Swift
81 lines
1.7 KiB
Swift
import Foundation
|
|
#if os(macOS)
|
|
import PostboxMac
|
|
import MtProtoKitMac
|
|
import SwiftSignalKitMac
|
|
#else
|
|
import Postbox
|
|
import MtProtoKitDynamic
|
|
import SwiftSignalKit
|
|
#endif
|
|
|
|
private struct CallSessionId: Hashable {
|
|
let id: Int64
|
|
|
|
init(_ id: Int64) {
|
|
self.id = id
|
|
}
|
|
|
|
var hashValue: Int {
|
|
return self.id.hashValue
|
|
}
|
|
|
|
static func ==(lhs: CallSessionId, rhs: CallSessionId) -> Bool {
|
|
return lhs.id == rhs.id
|
|
}
|
|
}
|
|
|
|
private final class CallSessionContext {
|
|
let peerId: PeerId
|
|
var state: CallSessionState
|
|
|
|
init(peerId: PeerId, state: CallSessionState) {
|
|
self.peerId = peerId
|
|
self.state = state
|
|
}
|
|
}
|
|
|
|
private final class CallSessionManagerContext {
|
|
private let queue: Queue
|
|
|
|
private var contexts: [CallSessionId: CallSessionContext] = [:]
|
|
|
|
init(queue: Queue) {
|
|
self.queue = queue
|
|
}
|
|
|
|
deinit {
|
|
assert(self.queue.isCurrent())
|
|
}
|
|
|
|
|
|
}
|
|
|
|
final class CallSessionManager {
|
|
private let queue = Queue()
|
|
private var contextRef: Unmanaged<CallSessionManagerContext>?
|
|
|
|
init() {
|
|
self.queue.async {
|
|
let context = CallSessionManagerContext(queue: self.queue)
|
|
self.contextRef = Unmanaged.passRetained(context)
|
|
}
|
|
}
|
|
|
|
deinit {
|
|
let contextRef = self.contextRef
|
|
self.queue.async {
|
|
contextRef?.release()
|
|
}
|
|
}
|
|
|
|
private func withContext(_ f: @escaping (CallSessionManagerContext) -> Void) {
|
|
self.queue.async {
|
|
if let contextRef = self.contextRef {
|
|
let context = contextRef.takeUnretainedValue()
|
|
f(context)
|
|
}
|
|
}
|
|
}
|
|
}
|