mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Update CallSessionManager
This commit is contained in:
parent
5f5d6acab8
commit
7a3aea37a6
@ -369,6 +369,7 @@ private final class CallSessionManagerContext {
|
|||||||
|
|
||||||
private let ringingSubscribers = Bag<([CallSessionRingingState]) -> Void>()
|
private let ringingSubscribers = Bag<([CallSessionRingingState]) -> Void>()
|
||||||
private var contexts: [CallSessionInternalId: CallSessionContext] = [:]
|
private var contexts: [CallSessionInternalId: CallSessionContext] = [:]
|
||||||
|
private var futureContextSubscribers: [CallSessionInternalId: Bag<(CallSession) -> Void>] = [:]
|
||||||
private var contextIdByStableId: [CallSessionStableId: CallSessionInternalId] = [:]
|
private var contextIdByStableId: [CallSessionStableId: CallSessionInternalId] = [:]
|
||||||
|
|
||||||
private var enqueuedSignalingData: [Int64: [Data]] = [:]
|
private var enqueuedSignalingData: [Int64: [Data]] = [:]
|
||||||
@ -443,7 +444,10 @@ private final class CallSessionManagerContext {
|
|||||||
return Signal { [weak self] subscriber in
|
return Signal { [weak self] subscriber in
|
||||||
let disposable = MetaDisposable()
|
let disposable = MetaDisposable()
|
||||||
queue.async {
|
queue.async {
|
||||||
if let strongSelf = self, let context = strongSelf.contexts[internalId] {
|
guard let strongSelf = self else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if let context = strongSelf.contexts[internalId] {
|
||||||
let index = context.subscribers.add { next in
|
let index = context.subscribers.add { next in
|
||||||
subscriber.putNext(next)
|
subscriber.putNext(next)
|
||||||
}
|
}
|
||||||
@ -459,8 +463,22 @@ private final class CallSessionManagerContext {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
subscriber.putNext(CallSession(id: internalId, stableId: nil, isOutgoing: false, type: .audio, state: .terminated(id: nil, reason: .error(.generic), options: []), isVideoPossible: true))
|
if strongSelf.futureContextSubscribers[internalId] == nil {
|
||||||
subscriber.putCompletion()
|
strongSelf.futureContextSubscribers[internalId] = Bag()
|
||||||
|
}
|
||||||
|
let index = strongSelf.futureContextSubscribers[internalId]?.add({ session in
|
||||||
|
subscriber.putNext(session)
|
||||||
|
})
|
||||||
|
if let index = index {
|
||||||
|
disposable.set(ActionDisposable {
|
||||||
|
queue.async {
|
||||||
|
guard let strongSelf = self else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
strongSelf.futureContextSubscribers[internalId]?.remove(index)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return disposable
|
return disposable
|
||||||
@ -517,6 +535,11 @@ private final class CallSessionManagerContext {
|
|||||||
for subscriber in context.subscribers.copyItems() {
|
for subscriber in context.subscribers.copyItems() {
|
||||||
subscriber(session)
|
subscriber(session)
|
||||||
}
|
}
|
||||||
|
if let futureSubscribers = self.futureContextSubscribers[internalId] {
|
||||||
|
for subscriber in futureSubscribers.copyItems() {
|
||||||
|
subscriber(session)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user