session-ios/SessionMessagingKit/Calls/WebRTCSession+DataChannel.swift
Morgan Pretty eeccfb47d5 Fixed all of the build errors from merge, migrated Call logic, started idBlinding migration and bug fixes
Fixed some broken file paths
Fixed a couple of bugs with closed groups
Fixed a few migration issues
Fixed a bug with the ProfilePictureView in open groups (was including the open parenthesis in the initials)
Migrated the Id Blinding changes to work with GRDB
Migrated the call logic to work with GRDB
Updated the code to work the with hard fork changes
2022-06-09 18:37:44 +10:00

50 lines
2 KiB
Swift

// Copyright © 2022 Rangeproof Pty Ltd. All rights reserved.
import Foundation
import WebRTC
import Foundation
import SessionUtilitiesKit
extension WebRTCSession: RTCDataChannelDelegate {
internal func createDataChannel() -> RTCDataChannel? {
let dataChannelConfiguration = RTCDataChannelConfiguration()
dataChannelConfiguration.isOrdered = true
dataChannelConfiguration.isNegotiated = true
dataChannelConfiguration.channelId = 548
guard let dataChannel = peerConnection?.dataChannel(forLabel: "CONTROL", configuration: dataChannelConfiguration) else {
SNLog("[Calls] Couldn't create data channel.")
return nil
}
return dataChannel
}
public func sendJSON(_ json: JSON) {
if let dataChannel = self.dataChannel, let jsonAsData = try? JSONSerialization.data(withJSONObject: json, options: [ .fragmentsAllowed ]) {
SNLog("[Calls] Send json to data channel")
let dataBuffer = RTCDataBuffer(data: jsonAsData, isBinary: false)
dataChannel.sendData(dataBuffer)
}
}
// MARK: Data channel delegate
public func dataChannelDidChangeState(_ dataChannel: RTCDataChannel) {
SNLog("[Calls] Data channel did change to \(dataChannel.readyState.rawValue)")
if dataChannel.readyState == .open {
delegate?.dataChannelDidOpen()
}
}
public func dataChannel(_ dataChannel: RTCDataChannel, didReceiveMessageWith buffer: RTCDataBuffer) {
if let json = try? JSONSerialization.jsonObject(with: buffer.data, options: [ .fragmentsAllowed ]) as? JSON {
SNLog("[Calls] Data channel did receive data: \(json)")
if let isRemoteVideoEnabled = json["video"] as? Bool {
delegate?.isRemoteVideoDidChange(isEnabled: isRemoteVideoEnabled)
}
if let _ = json["hangup"] {
delegate?.didReceiveHangUpSignal()
}
}
}
}