in Swift/KVSiOSApp/WebRTCClient.swift [149:175]
func checkAndAddIceCandidate(remoteCandidate: RTCIceCandidate, clientId: String) {
// if answer/offer is not received, it means peer connection is not found. Hold the received ICE candidates in the map.
if peerConnectionFoundMap.index(forKey: clientId) == nil {
print("SDP exchange not completed yet. Adding candidate: \(remoteCandidate.sdp) to pending queue")
// If the entry for the client ID already exists (in case of subsequent ICE candidates), update the queue
if pendingIceCandidatesMap.index(forKey: clientId) != nil {
var pendingIceCandidateListByClientId: Set<RTCIceCandidate> = pendingIceCandidatesMap[clientId]!
pendingIceCandidateListByClientId.insert(remoteCandidate)
pendingIceCandidatesMap[clientId] = pendingIceCandidateListByClientId
}
// If the first ICE candidate before peer connection is received, add entry to map and ICE candidate to a queue
else {
var pendingIceCandidateListByClientId = Set<RTCIceCandidate>()
pendingIceCandidateListByClientId.insert(remoteCandidate)
pendingIceCandidatesMap[clientId] = pendingIceCandidateListByClientId
}
}
// This is the case where peer connection is established and ICE candidates are received for the established connection
else {
print("Peer connection found already")
// Remote sent us ICE candidates, add to local peer connection
let peerConnectionCurrent : RTCPeerConnection = peerConnectionFoundMap[clientId]!
peerConnectionCurrent.add(remoteCandidate);
print("Added ice candidate \(remoteCandidate.sdp)");
}
}