diff --git a/CHANGELOG.md b/CHANGELOG.md index d6e8ffe2..0ec5266e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## [Unreleased] + - Working on some connection issues (for Toya) - Fixed issue where link and game are both open. - Made it clear when user was invited to room. - Fixed the status bar for stories. diff --git a/Sources/Room/Service/RoomClient.swift b/Sources/Room/Service/RoomClient.swift index 5466d7bd..ceccf55c 100644 --- a/Sources/Room/Service/RoomClient.swift +++ b/Sources/Room/Service/RoomClient.swift @@ -234,8 +234,13 @@ extension RoomClient: WebRTCClientDelegate { case .connected: rtc.speakerOn() delegate?.roomClientDidConnect(self) - case .failed, .closed: + case .closed: delegate?.roomClientDidDisconnect(self) + case .disconnected: + rtc.offer(constraints: [kRTCMediaConstraintsIceRestart: kRTCMediaConstraintsValueTrue], completion: { result in + self.signalClient.offer(description: result) + }) + debugPrint("restarting") default: return // @TODO } diff --git a/Sources/Room/Service/WebRTCClient.swift b/Sources/Room/Service/WebRTCClient.swift index e65a58b1..d5541089 100644 --- a/Sources/Room/Service/WebRTCClient.swift +++ b/Sources/Room/Service/WebRTCClient.swift @@ -25,7 +25,7 @@ final class WebRTCClient: NSObject { private let mediaConstrains = [ kRTCMediaConstraintsOfferToReceiveAudio: kRTCMediaConstraintsValueTrue, kRTCMediaConstraintsOfferToReceiveVideo: kRTCMediaConstraintsValueFalse, - kRTCMediaConstraintsVoiceActivityDetection: kRTCMediaConstraintsValueTrue, + kRTCMediaConstraintsIceRestart: kRTCMediaConstraintsValueTrue, ] private var localDataChannels = [String: RTCDataChannel]() @@ -79,8 +79,13 @@ final class WebRTCClient: NSObject { } } - func offer(completion: @escaping (_ sdp: RTCSessionDescription) -> Void) { - let constrains = RTCMediaConstraints(mandatoryConstraints: mediaConstrains, optionalConstraints: nil) + func offer(constraints: [String: String]? = nil, completion: @escaping (_ sdp: RTCSessionDescription) -> Void) { + var mandatoryConstraints = mediaConstrains + if let constraints = constraints { + constraints.forEach { key, value in mandatoryConstraints[key] = value } + } + + let constrains = RTCMediaConstraints(mandatoryConstraints: mandatoryConstraints, optionalConstraints: nil) peerConnection.offer(for: constrains) { sdp, _ in guard let sdp = sdp else { return