import WebRTC import Foundation extension WebRTCSession: RTCDataChannelDelegate { internal func createDataChannel() { let dataChannelConfiguration = RTCDataChannelConfiguration() dataChannelConfiguration.isOrdered = true dataChannelConfiguration.isNegotiated = true dataChannelConfiguration.maxRetransmits = 30 dataChannelConfiguration.maxPacketLifeTime = 30000 dataChannel = peerConnection.dataChannel(forLabel: "DATACHANNEL", configuration: dataChannelConfiguration) dataChannel?.delegate = self } public func sendJSON(_ json: JSON) { if let dataChannel = self.dataChannel, let jsonAsData = try? JSONSerialization.data(withJSONObject: json, options: [ .fragmentsAllowed ]) { let dataBuffer = RTCDataBuffer(data: jsonAsData, isBinary: false) dataChannel.sendData(dataBuffer) } } // MARK: Data channel delegate public func dataChannelDidChangeState(_ dataChannel: RTCDataChannel) { print("[Calls] Data channed did change to \(dataChannel.readyState)") } public func dataChannel(_ dataChannel: RTCDataChannel, didReceiveMessageWith buffer: RTCDataBuffer) { print("[Calls] Data channel did receive data: \(buffer)") if let json = try? JSONSerialization.jsonObject(with: buffer.data, options: [ .fragmentsAllowed ]) { } } }