@ -358,39 +358,50 @@ public final class WebRTCSession : NSObject, RTCPeerConnectionDelegate {
)
)
}
}
public func endCall (
public func endCall ( with sessionId : String ) -> AnyPublisher < Void , Error > {
_ db : Database ,
return dependencies . storage
with sessionId : String
. writePublisher { [ dependencies = self . dependencies ] db in
) throws {
guard let thread : SessionThread = try SessionThread . fetchOne ( db , id : sessionId ) else {
guard let thread : SessionThread = try SessionThread . fetchOne ( db , id : sessionId ) else { return }
throw WebRTCSessionError . noThread
}
SNLog ( " [Calls] Sending end call message. " )
SNLog ( " [Calls] Sending end call message. " )
let preparedSendData : MessageSender . PreparedSendData = try MessageSender
. preparedSendData (
return try MessageSender
db ,
. preparedSendData (
message : CallMessage (
db ,
uuid : self . uuid ,
message : CallMessage (
kind : . endCall ,
uuid : self . uuid ,
sdps : [ ]
kind : . endCall ,
)
sdps : [ ]
. with ( try ? thread . disappearingMessagesConfiguration
)
. fetchOne ( db ) ?
. with ( try ? thread . disappearingMessagesConfiguration
. forcedWithDisappearAfterReadIfNeeded ( )
. fetchOne ( db ) ?
) ,
. forcedWithDisappearAfterReadIfNeeded ( )
to : try Message . Destination . from ( db , threadId : thread . id , threadVariant : thread . variant ) ,
) ,
namespace : try Message . Destination
to : try Message . Destination . from ( db , threadId : thread . id , threadVariant : thread . variant ) ,
. from ( db , threadId : thread . id , threadVariant : thread . variant )
namespace : try Message . Destination
. defaultNamespace ,
. from ( db , threadId : thread . id , threadVariant : thread . variant )
interactionId : nil ,
. defaultNamespace ,
using : dependencies
interactionId : nil ,
)
using : dependencies
)
MessageSender
}
. sendImmediate ( data : preparedSendData , using : dependencies )
. subscribe ( on : DispatchQueue . global ( qos : . userInitiated ) )
. subscribe ( on : DispatchQueue . global ( qos : . userInitiated ) )
. retry ( 5 )
. flatMap { [ dependencies = self . dependencies ] sendData in
. sinkUntilComplete ( )
MessageSender
. sendImmediate ( data : sendData , using : dependencies )
. retry ( 5 )
}
. handleEvents ( receiveCompletion : { result in
switch result {
case . finished :
SNLog ( " [Calls] End call message sent " )
case . failure ( let error ) :
SNLog ( " [Calls] Error sending End call message due to error: \( error ) " )
}
} )
. eraseToAnyPublisher ( )
}
}
public func dropConnection ( ) {
public func dropConnection ( ) {