mirror of
https://github.com/oxen-io/session-ios.git
synced 2023-12-13 21:30:14 +01:00
add data channel
This commit is contained in:
parent
0e473e35a7
commit
9030710d9d
|
@ -140,6 +140,7 @@
|
||||||
7B4C75CD26BB92060000AC89 /* DeletedMessageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B4C75CC26BB92060000AC89 /* DeletedMessageView.swift */; };
|
7B4C75CD26BB92060000AC89 /* DeletedMessageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B4C75CC26BB92060000AC89 /* DeletedMessageView.swift */; };
|
||||||
7BC01A3E241F40AB00BC7C55 /* NotificationServiceExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BC01A3D241F40AB00BC7C55 /* NotificationServiceExtension.swift */; };
|
7BC01A3E241F40AB00BC7C55 /* NotificationServiceExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BC01A3D241F40AB00BC7C55 /* NotificationServiceExtension.swift */; };
|
||||||
7BC01A42241F40AB00BC7C55 /* SessionNotificationServiceExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 7BC01A3B241F40AB00BC7C55 /* SessionNotificationServiceExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
7BC01A42241F40AB00BC7C55 /* SessionNotificationServiceExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 7BC01A3B241F40AB00BC7C55 /* SessionNotificationServiceExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
||||||
|
7BCD116C27016062006330F1 /* WebRTCSession+DataChannel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BCD116B27016062006330F1 /* WebRTCSession+DataChannel.swift */; };
|
||||||
7BDCFC08242186E700641C39 /* NotificationServiceExtensionContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BDCFC07242186E700641C39 /* NotificationServiceExtensionContext.swift */; };
|
7BDCFC08242186E700641C39 /* NotificationServiceExtensionContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BDCFC07242186E700641C39 /* NotificationServiceExtensionContext.swift */; };
|
||||||
7BDCFC0B2421EB7600641C39 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B6F509951AA53F760068F56A /* Localizable.strings */; };
|
7BDCFC0B2421EB7600641C39 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B6F509951AA53F760068F56A /* Localizable.strings */; };
|
||||||
945AA2B82B621254F69FA9E8 /* Pods_SessionUtilitiesKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9117261809D69B3D7C26B8F1 /* Pods_SessionUtilitiesKit.framework */; };
|
945AA2B82B621254F69FA9E8 /* Pods_SessionUtilitiesKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9117261809D69B3D7C26B8F1 /* Pods_SessionUtilitiesKit.framework */; };
|
||||||
|
@ -1114,6 +1115,7 @@
|
||||||
7BC01A3B241F40AB00BC7C55 /* SessionNotificationServiceExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = SessionNotificationServiceExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
|
7BC01A3B241F40AB00BC7C55 /* SessionNotificationServiceExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = SessionNotificationServiceExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
7BC01A3D241F40AB00BC7C55 /* NotificationServiceExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationServiceExtension.swift; sourceTree = "<group>"; };
|
7BC01A3D241F40AB00BC7C55 /* NotificationServiceExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationServiceExtension.swift; sourceTree = "<group>"; };
|
||||||
7BC01A3F241F40AB00BC7C55 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
7BC01A3F241F40AB00BC7C55 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||||
|
7BCD116B27016062006330F1 /* WebRTCSession+DataChannel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "WebRTCSession+DataChannel.swift"; sourceTree = "<group>"; };
|
||||||
7BDCFC0424206E7300641C39 /* SessionNotificationServiceExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = SessionNotificationServiceExtension.entitlements; sourceTree = "<group>"; };
|
7BDCFC0424206E7300641C39 /* SessionNotificationServiceExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = SessionNotificationServiceExtension.entitlements; sourceTree = "<group>"; };
|
||||||
7BDCFC07242186E700641C39 /* NotificationServiceExtensionContext.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NotificationServiceExtensionContext.swift; sourceTree = "<group>"; };
|
7BDCFC07242186E700641C39 /* NotificationServiceExtensionContext.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NotificationServiceExtensionContext.swift; sourceTree = "<group>"; };
|
||||||
7DD180F770F8518B4E8796F2 /* Pods-SessionUtilitiesKit.app store release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SessionUtilitiesKit.app store release.xcconfig"; path = "Pods/Target Support Files/Pods-SessionUtilitiesKit/Pods-SessionUtilitiesKit.app store release.xcconfig"; sourceTree = "<group>"; };
|
7DD180F770F8518B4E8796F2 /* Pods-SessionUtilitiesKit.app store release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SessionUtilitiesKit.app store release.xcconfig"; path = "Pods/Target Support Files/Pods-SessionUtilitiesKit/Pods-SessionUtilitiesKit.app store release.xcconfig"; sourceTree = "<group>"; };
|
||||||
|
@ -2364,6 +2366,7 @@
|
||||||
B806ECA026C4A7E4008BDA44 /* WebRTCSession+UI.swift */,
|
B806ECA026C4A7E4008BDA44 /* WebRTCSession+UI.swift */,
|
||||||
B8B558FE26C4E05E00693325 /* WebRTCSession+MessageHandling.swift */,
|
B8B558FE26C4E05E00693325 /* WebRTCSession+MessageHandling.swift */,
|
||||||
B8BF43B926CC95FB007828D1 /* WebRTC+Utilities.swift */,
|
B8BF43B926CC95FB007828D1 /* WebRTC+Utilities.swift */,
|
||||||
|
7BCD116B27016062006330F1 /* WebRTCSession+DataChannel.swift */,
|
||||||
);
|
);
|
||||||
path = Calls;
|
path = Calls;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -4757,6 +4760,7 @@
|
||||||
C32C5FD6256E0346003C73A2 /* Notification+Thread.swift in Sources */,
|
C32C5FD6256E0346003C73A2 /* Notification+Thread.swift in Sources */,
|
||||||
C3BBE0C72554F1570050F1E3 /* FixedWidthInteger+BigEndian.swift in Sources */,
|
C3BBE0C72554F1570050F1E3 /* FixedWidthInteger+BigEndian.swift in Sources */,
|
||||||
B806ECA126C4A7E4008BDA44 /* WebRTCSession+UI.swift in Sources */,
|
B806ECA126C4A7E4008BDA44 /* WebRTCSession+UI.swift in Sources */,
|
||||||
|
7BCD116C27016062006330F1 /* WebRTCSession+DataChannel.swift in Sources */,
|
||||||
C32C5C88256DD0D2003C73A2 /* Storage+Messaging.swift in Sources */,
|
C32C5C88256DD0D2003C73A2 /* Storage+Messaging.swift in Sources */,
|
||||||
C32C59C7256DB41F003C73A2 /* TSThread.m in Sources */,
|
C32C59C7256DB41F003C73A2 /* TSThread.m in Sources */,
|
||||||
C300A5B22554AF9800555489 /* VisibleMessage+Profile.swift in Sources */,
|
C300A5B22554AF9800555489 /* VisibleMessage+Profile.swift in Sources */,
|
||||||
|
|
34
SessionMessagingKit/Calls/WebRTCSession+DataChannel.swift
Normal file
34
SessionMessagingKit/Calls/WebRTCSession+DataChannel.swift
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
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 ]) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -69,6 +69,9 @@ public final class WebRTCSession : NSObject, RTCPeerConnectionDelegate {
|
||||||
return peerConnection.transceivers.first { $0.mediaType == .video }?.receiver.track as? RTCVideoTrack
|
return peerConnection.transceivers.first { $0.mediaType == .video }?.receiver.track as? RTCVideoTrack
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
// Data Channel
|
||||||
|
internal var dataChannel: RTCDataChannel?
|
||||||
|
|
||||||
// MARK: Error
|
// MARK: Error
|
||||||
public enum Error : LocalizedError {
|
public enum Error : LocalizedError {
|
||||||
case noThread
|
case noThread
|
||||||
|
@ -87,6 +90,7 @@ public final class WebRTCSession : NSObject, RTCPeerConnectionDelegate {
|
||||||
self.contactSessionID = contactSessionID
|
self.contactSessionID = contactSessionID
|
||||||
super.init()
|
super.init()
|
||||||
let mediaStreamTrackIDS = ["ARDAMS"]
|
let mediaStreamTrackIDS = ["ARDAMS"]
|
||||||
|
createDataChannel()
|
||||||
peerConnection.add(audioTrack, streamIds: mediaStreamTrackIDS)
|
peerConnection.add(audioTrack, streamIds: mediaStreamTrackIDS)
|
||||||
peerConnection.add(localVideoTrack, streamIds: mediaStreamTrackIDS)
|
peerConnection.add(localVideoTrack, streamIds: mediaStreamTrackIDS)
|
||||||
// Configure audio session
|
// Configure audio session
|
||||||
|
@ -194,7 +198,7 @@ public final class WebRTCSession : NSObject, RTCPeerConnectionDelegate {
|
||||||
peerConnection.close()
|
peerConnection.close()
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: Delegate
|
// MARK: Peer connection delegate
|
||||||
public func peerConnection(_ peerConnection: RTCPeerConnection, didChange state: RTCSignalingState) {
|
public func peerConnection(_ peerConnection: RTCPeerConnection, didChange state: RTCSignalingState) {
|
||||||
print("[Calls] Signaling state changed to: \(state).")
|
print("[Calls] Signaling state changed to: \(state).")
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue