private async void _conductor_OnIceCandidate(string sdp_mid, int sdp_mline_index, string sdp) { var candidate = new WebRTCIceCandidate() { SdpMid = sdp_mid, SdpMLineIndex = (ushort)sdp_mline_index, Candidate = sdp, }; if (!_canSendIceCandidates) { _pendingCandidates.Add(candidate); } else { try { await _signalingTransporter.SendRequestAsync <WebRTCIceCandidateRequest, WebRTCIceCandidateResponse>(new WebRTCIceCandidateRequest() { Candidate = candidate, }, new ResonanceRequestConfig() { Timeout = TimeSpan.FromSeconds(10) }); } catch (Exception ex) { Logger.LogError(ex, "Error sending ice candidate."); } } }
private async void FlushIceCandidates() { Logger.LogInformation("Flushing queued ice candidates..."); _canSendIceCandidates = true; var pending = _pendingCandidates.ToList(); _pendingCandidates.Clear(); foreach (var iceCandidate in pending) { var candidate = new WebRTCIceCandidate() { Candidate = iceCandidate.candidate, SdpMid = iceCandidate.sdpMid, SdpMLineIndex = iceCandidate.sdpMLineIndex, UserNameFragment = iceCandidate.usernameFragment }; try { Logger.LogInformation("Sending ice {@candidate} to remote peer.", candidate); await _signalingTransporter.SendRequestAsync <WebRTCIceCandidateRequest, WebRTCIceCandidateResponse>(new WebRTCIceCandidateRequest() { ChannelName = ChannelName, Candidate = candidate }, new ResonanceRequestConfig() { Timeout = TimeSpan.FromSeconds(10) }); } catch (Exception ex) { Logger.LogError(ex, "Error sending ice {@candidate} request.", candidate); } } }
private async void OnIceCandidateAvailable(RTCIceCandidate iceCandidate) { var candidate = new WebRTCIceCandidate() { Candidate = iceCandidate.candidate, SdpMid = iceCandidate.sdpMid, SdpMLineIndex = iceCandidate.sdpMLineIndex, UserNameFragment = iceCandidate.usernameFragment }; if (_canSendIceCandidates) { Logger.LogInformation("New ice candidate found. Sending ice {@candidate} to remote peer.", candidate); try { await _signalingTransporter.SendRequestAsync <WebRTCIceCandidateRequest, WebRTCIceCandidateResponse>(new WebRTCIceCandidateRequest() { ChannelName = ChannelName, Candidate = candidate }, new ResonanceRequestConfig() { Timeout = TimeSpan.FromSeconds(10) }); } catch (Exception ex) { Logger.LogError(ex, "Error sending ice {@candidate} request.", candidate); } } else { Logger.LogInformation("New ice candidate found. queuing {@candidate}.", candidate); _pendingCandidates.Add(iceCandidate); } }