From 6eecef99ba442145df17948da1c47a68f2d03f62 Mon Sep 17 00:00:00 2001 From: Michael Kirk Date: Fri, 6 Jan 2017 14:40:44 +0100 Subject: [PATCH] Promise aware Message sender As this could be used elsewhere, ideally it'd added to the actual class definition, but MessageSender (SSK) doesn't use PromiseKit // FREEBIE --- Signal/src/call/CallService.swift | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/Signal/src/call/CallService.swift b/Signal/src/call/CallService.swift index 0801f1958..b999fd4ae 100644 --- a/Signal/src/call/CallService.swift +++ b/Signal/src/call/CallService.swift @@ -178,7 +178,7 @@ fileprivate let timeoutSeconds = 60 return self.peerConnectionClient!.setLocalSessionDescription(sessionDescription).then(on: CallService.signalingQueue) { let offerMessage = OWSCallOfferMessage(callId: call.signalingId, sessionDescription: sessionDescription.sdp) let callMessage = OWSOutgoingCallMessage(thread: thread, offerMessage: offerMessage) - return self.sendMessage(callMessage) + return self.messageSender.sendCallMessage(callMessage) } }.catch(on: CallService.signalingQueue) { error in Logger.error("\(self.TAG) placing call failed with error: \(error)") @@ -215,7 +215,7 @@ fileprivate let timeoutSeconds = 60 if pendingIceUpdateMessages.count > 0 { let callMessage = OWSOutgoingCallMessage(thread: thread, iceUpdateMessages: pendingIceUpdateMessages) - _ = sendMessage(callMessage).catch { error in + _ = messageSender.sendCallMessage(callMessage).catch { error in Logger.error("\(self.TAG) failed to send ice updates in \(#function) with error: \(error)") } } @@ -329,7 +329,7 @@ fileprivate let timeoutSeconds = 60 let answerMessage = OWSCallAnswerMessage(callId: newCall.signalingId, sessionDescription: negotiatedSessionDescription.sdp) let callAnswerMessage = OWSOutgoingCallMessage(thread: thread, answerMessage: answerMessage) - return self.sendMessage(callAnswerMessage) + return self.messageSender.sendCallMessage(callAnswerMessage) }.then(on: CallService.signalingQueue) { Logger.debug("\(self.TAG) successfully sent callAnswerMessage") @@ -438,7 +438,7 @@ fileprivate let timeoutSeconds = 60 if self.sendIceUpdatesImmediately { let callMessage = OWSOutgoingCallMessage(thread: thread, iceUpdateMessage: iceUpdateMessage) - _ = sendMessage(callMessage) + _ = self.messageSender.sendCallMessage(callMessage) } else { // For outgoing messages, we wait to send ice updates until we're sure client received our call message. // e.g. if the client has blocked our message due to an identity change, we'd otherwise @@ -702,7 +702,7 @@ fileprivate let timeoutSeconds = 60 // If the call hasn't started yet, we don't have a data channel to communicate the hang up. Use Signal Service Message. let hangupMessage = OWSCallHangupMessage(callId: call.signalingId) let callMessage = OWSOutgoingCallMessage(thread: thread, hangupMessage: hangupMessage) - _ = sendMessage(callMessage).then(on: CallService.signalingQueue) { + _ = self.messageSender.sendCallMessage(callMessage).then(on: CallService.signalingQueue) { Logger.debug("\(self.TAG) successfully sent hangup call message to \(thread)") }.catch(on: CallService.signalingQueue) { error in Logger.error("\(self.TAG) failed to send hangup call message to \(thread) with error: \(error)") @@ -820,12 +820,6 @@ fileprivate let timeoutSeconds = 60 } } - private func sendMessage(_ message: OWSOutgoingCallMessage) -> Promise { - return Promise { fulfill, reject in - self.messageSender.send(message, success: fulfill, failure: reject) - } - } - public func handleFailedCall(error: CallError) { assertOnSignalingQueue() Logger.error("\(TAG) call failed with error: \(error)") @@ -1037,3 +1031,14 @@ fileprivate extension RTCIceConnectionState { } } } + +fileprivate extension MessageSender { + /** + * Wrap message sending in a Promise for easier callback chaining. + */ + fileprivate func sendCallMessage(_ message: OWSOutgoingCallMessage) -> Promise { + return Promise { fulfill, reject in + self.send(message, success: fulfill, failure: reject) + } + } +}