This commit is contained in:
Niels Andriesse 2021-08-18 10:45:55 +10:00
parent 6fdf544368
commit b3ead76221
4 changed files with 16 additions and 6 deletions

View File

@ -19,6 +19,12 @@ final class CallVC : UIViewController, WebRTCSessionDelegate {
}()
// MARK: UI Components
private lazy var remoteVideoView: RTCMTLVideoView = {
let result = RTCMTLVideoView()
result.contentMode = .scaleAspectFill
return result
}()
private lazy var fadeView: UIView = {
let result = UIView()
let height: CGFloat = 64
@ -100,8 +106,6 @@ final class CallVC : UIViewController, WebRTCSessionDelegate {
func setUpViewHierarchy() {
// Remote video view
let remoteVideoView = RTCMTLVideoView()
remoteVideoView.contentMode = .scaleAspectFill
webRTCSession.attachRemoteRenderer(remoteVideoView)
view.addSubview(remoteVideoView)
remoteVideoView.translatesAutoresizingMaskIntoConstraints = false
@ -148,9 +152,11 @@ final class CallVC : UIViewController, WebRTCSessionDelegate {
// MARK: Interaction
func handleEndCallMessage(_ message: CallMessage) {
print("[Calls] Ending call.")
WebRTCSession.current?.dropConnection()
WebRTCSession.current = nil
UIView.animate(withDuration: 0.25) {
self.remoteVideoView.alpha = 0
self.callEndedLabel.alpha = 1
}
Timer.scheduledTimer(withTimeInterval: 2, repeats: false) { _ in

View File

@ -194,6 +194,7 @@ public final class WebRTCSession : NSObject, RTCPeerConnectionDelegate {
guard let thread = TSContactThread.fetch(for: sessionID, using: transaction) else { return }
let message = CallMessage()
message.kind = .endCall
print("[Calls] Sending end call message.")
MessageSender.sendNonDurably(message, in: thread, using: transaction).retainUntilComplete()
dropConnection()
WebRTCSession.current = nil

View File

@ -40,7 +40,6 @@ public final class CallMessage : ControlMessage {
// MARK: Validation
public override var isValid: Bool {
guard super.isValid else { return false }
guard let sdps = sdps, !sdps.isEmpty else { return false }
return kind != nil
}
@ -97,7 +96,7 @@ public final class CallMessage : ControlMessage {
}
public override func toProto(using transaction: YapDatabaseReadWriteTransaction) -> SNProtoContent? {
guard let kind = kind, let sdps = sdps, !sdps.isEmpty else {
guard let kind = kind else {
SNLog("Couldn't construct call message proto from: \(self).")
return nil
}
@ -110,7 +109,9 @@ public final class CallMessage : ControlMessage {
case .endCall: type = .endCall
}
let callMessageProto = SNProtoCallMessage.builder(type: type)
callMessageProto.setSdps(sdps)
if let sdps = sdps, !sdps.isEmpty {
callMessageProto.setSdps(sdps)
}
if case let .iceCandidates(sdpMLineIndexes, sdpMids) = kind {
callMessageProto.setSdpMlineIndexes(sdpMLineIndexes)
callMessageProto.setSdpMids(sdpMids)

View File

@ -289,7 +289,9 @@ extension MessageReceiver {
candidates.append(candidate)
}
getWebRTCSession().handleICECandidates(candidates)
case .endCall: handleEndCallMessage?(message)
case .endCall:
print("[Calls] Received end call message.")
handleEndCallMessage?(message)
}
}