private async Task <VoipPhoneCallResourceReservationStatus> LaunchRTCTaskAsync() { // End current call before starting another call, there should be only one RTC task active at a time. // Duplicate calls to launch RTC task will result in HR ERROR_ALREADY_EXSIST // <TODO> For multiple calls against single rtc task add logic to verify that the rtc is not completed, // and then Skip launching new rtc task Current.EndCall(); VoipCallCoordinator vCC = VoipCallCoordinator.GetDefault(); VoipPhoneCallResourceReservationStatus status = VoipPhoneCallResourceReservationStatus.ResourcesNotAvailable; try { status = await vCC.ReserveCallResourcesAsync(Current.RtcCallTaskName); } catch (Exception ex) { if (ex.HResult == RTcTaskAlreadyRuningErrorCode) { Debug.WriteLine("RTC Task Already running"); } } return(status); }
private async void ConnectToVoiceChannel(VoiceServerUpdate data, VoiceState state) { voipCall?.NotifyCallEnded(); VoipCallCoordinator vcc = VoipCallCoordinator.GetDefault(); var status = await vcc.ReserveCallResourcesAsync("WebRTCBackgroundTask.VoipBackgroundTask"); // TODO: More info for Mobile voipCall = vcc.RequestNewOutgoingCall(string.Empty, string.Empty, "Quarrel", VoipPhoneCallMedia.Audio); voipCall.NotifyCallActive(); voiceConnection = new VoiceConnection(data, state, webrtcManager); voiceConnection.Speak += Speak; await voiceConnection.ConnectAsync(); }