in Swift/KVSiOSApp/SignalingClient.swift [93:145]
func websocketDidReceiveMessage(socket _: WebSocketClient, text: String) {
debugPrint("Additional signaling messages \(text)")
var parsedMessage: Message?
parsedMessage = Event.parseEvent(event: text)
if parsedMessage != nil {
let messagePayload = parsedMessage?.getMessagePayload()
let messageType = parsedMessage?.getAction()
let senderClientId = parsedMessage?.getSenderClientId()
// todo: add a guard here because some of java base64 encode options might break ios base64 decode unless extended
let message: String = String(messagePayload!.base64Decoded()!)
do {
let jsonObject = try message.trim().convertToDictionary()
if jsonObject.count != 0 {
if messageType == "SDP_OFFER" {
guard let sdp = jsonObject["sdp"] as? String else {
return
}
let rcSessionDescription: RTCSessionDescription = RTCSessionDescription(type: .offer, sdp: sdp)
delegate?.signalClient(self, senderClientId: senderClientId!, didReceiveRemoteSdp: rcSessionDescription)
debugPrint("SDP offer received from signaling \(sdp)")
} else if messageType == "SDP_ANSWER" {
guard let sdp = jsonObject["sdp"] as? String else {
return
}
let rcSessionDescription: RTCSessionDescription = RTCSessionDescription(type: .answer, sdp: sdp)
delegate?.signalClient(self, senderClientId: "", didReceiveRemoteSdp: rcSessionDescription)
debugPrint("SDP answer received from signaling \(sdp)")
} else if messageType == "ICE_CANDIDATE" {
guard let iceCandidate = jsonObject["candidate"] as? String else {
return
}
guard let sdpMid = jsonObject["sdpMid"] as? String else {
return
}
guard let sdpMLineIndex = jsonObject["sdpMLineIndex"] as? Int32 else {
return
}
let rtcIceCandidate: RTCIceCandidate = RTCIceCandidate(sdp: iceCandidate, sdpMLineIndex: sdpMLineIndex, sdpMid: sdpMid)
delegate?.signalClient(self, senderClientId: senderClientId!, didReceiveCandidate: rtcIceCandidate)
debugPrint("ICE candidate received from signaling \(iceCandidate)")
}
} else {
dump(jsonObject)
}
} catch {
print("payLoad parsing Error \(error)")
}
}
}