handle offer message might come in earlier than pre offer message
This commit is contained in:
parent
ee83523621
commit
716378ccd3
|
@ -161,6 +161,7 @@ public final class SessionCall: NSObject, WebRTCSessionDelegate {
|
|||
}
|
||||
|
||||
func didReceiveRemoteSDP(sdp: RTCSessionDescription) {
|
||||
print("[Calls] Did receive remote sdp.")
|
||||
remoteSDP = sdp
|
||||
if hasStartedConnecting {
|
||||
webRTCSession.handleRemoteSDP(sdp, from: sessionID) // This sends an answer message internally
|
||||
|
|
|
@ -22,17 +22,24 @@ extension AppDelegate {
|
|||
|
||||
@objc func setUpCallHandling() {
|
||||
// Pre offer messages
|
||||
MessageReceiver.handlePreOfferCallMessage = { (message, transaction) in
|
||||
MessageReceiver.handleNewCallOfferMessageIfNeeded = { (message, transaction) in
|
||||
guard CurrentAppContext().isMainApp else { return }
|
||||
let callManager = AppEnvironment.shared.callManager
|
||||
// Ignore pre offer message afte the same call instance has been generated
|
||||
if let currentCall = callManager.currentCall, currentCall.uuid == message.uuid! { return }
|
||||
guard callManager.currentCall == nil && SSKPreferences.areCallsEnabled else {
|
||||
callManager.handleIncomingCallOfferInBusyOrUnenabledState(offerMessage: message, using: transaction)
|
||||
return
|
||||
}
|
||||
DispatchQueue.main.async {
|
||||
if let caller = message.sender, let uuid = message.uuid {
|
||||
let call = SessionCall(for: caller, uuid: uuid, mode: .answer)
|
||||
call.callMessageTimestamp = message.sentTimestamp
|
||||
// Create incoming call message
|
||||
let thread = TSContactThread.getOrCreateThread(withContactSessionID: message.sender!, transaction: transaction)
|
||||
let tsMessage = TSIncomingMessage.from(message, associatedWith: thread)
|
||||
tsMessage.save(with: transaction)
|
||||
// Handle UI
|
||||
if let caller = message.sender, let uuid = message.uuid {
|
||||
let call = SessionCall(for: caller, uuid: uuid, mode: .answer)
|
||||
call.callMessageTimestamp = message.sentTimestamp
|
||||
DispatchQueue.main.async {
|
||||
if CurrentAppContext().isMainAppAndActive {
|
||||
guard let presentingVC = CurrentAppContext().frontmostViewController() else { preconditionFailure() } // TODO: Handle more gracefully
|
||||
if let conversationVC = presentingVC as? ConversationVC, let contactThread = conversationVC.thread as? TSContactThread, contactThread.contactSessionID() == caller {
|
||||
|
@ -51,7 +58,6 @@ extension AppDelegate {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
// Offer messages
|
||||
|
|
|
@ -268,21 +268,11 @@ extension MessageReceiver {
|
|||
case .preOffer:
|
||||
print("[Calls] Received pre-offer message.")
|
||||
let transaction = transaction as! YapDatabaseReadWriteTransaction
|
||||
if SSKPreferences.areCallsEnabled {
|
||||
let storage = SNMessagingKitConfiguration.shared.storage
|
||||
if let threadID = storage.getOrCreateThread(for: message.sender!, groupPublicKey: message.groupPublicKey, openGroupID: nil, using: transaction),
|
||||
let thread = TSThread.fetch(uniqueId: threadID, transaction: transaction) {
|
||||
let tsMessage = TSIncomingMessage.from(message, associatedWith: thread)
|
||||
tsMessage.save(with: transaction)
|
||||
}
|
||||
}
|
||||
handlePreOfferCallMessage?(message, transaction)
|
||||
handleNewCallOfferMessageIfNeeded?(message, transaction)
|
||||
case .offer:
|
||||
print("[Calls] Received offer message.")
|
||||
if WebRTCSession.current?.uuid != message.uuid! {
|
||||
// TODO: Call in progress, put the new call on hold/reject
|
||||
return
|
||||
}
|
||||
let transaction = transaction as! YapDatabaseReadWriteTransaction
|
||||
handleNewCallOfferMessageIfNeeded?(message, transaction)
|
||||
handleOfferCallMessage?(message)
|
||||
case .answer:
|
||||
print("[Calls] Received answer message.")
|
||||
|
|
|
@ -2,7 +2,7 @@ import SessionUtilitiesKit
|
|||
|
||||
public enum MessageReceiver {
|
||||
private static var lastEncryptionKeyPairRequest: [String:Date] = [:]
|
||||
public static var handlePreOfferCallMessage: ((CallMessage, YapDatabaseReadWriteTransaction) -> Void)?
|
||||
public static var handleNewCallOfferMessageIfNeeded: ((CallMessage, YapDatabaseReadWriteTransaction) -> Void)?
|
||||
public static var handleOfferCallMessage: ((CallMessage) -> Void)?
|
||||
public static var handleAnswerCallMessage: ((CallMessage) -> Void)?
|
||||
public static var handleEndCallMessage: ((CallMessage) -> Void)?
|
||||
|
|
Loading…
Reference in New Issue