/// <summary> /// Setup mode of interaction for the customer endpoint. This can be done only after the customer endpoint is seen. /// </summary> /// <param name="task">The task instance for this operation.</param> /// <remarks>To add announce but remove listening (or vice versa), two operations would be needed.</remarks> public void UpdateInteractiveMode(AsyncTask task, object state) { ArgumentTuple args = (ArgumentTuple)state; task.DoOneStep( delegate() { InteractionMode interactiveMode = InteractionMode.None; bool isAdd = false; isAdd = (bool)args.One; interactiveMode = (InteractionMode)args.Two; // Integer var outgoingRoutes = new List <OutgoingAudioRoute>(); var incomingRoutes = new List <IncomingAudioRoute>(); InteractionMode announce = InteractionMode.AnnounceSpeech | InteractionMode.AnnounceSpeechAndDtmf; InteractionMode listen = InteractionMode.ListenSpeech | InteractionMode.ListenSpeechAndDtmf; if ((interactiveMode & announce) != 0) { OutgoingAudioRoute outRoute = new OutgoingAudioRoute(this.TargetUriEndpoint); outRoute.IsDtmfEnabled = (interactiveMode & InteractionMode.AnnounceSpeechAndDtmf) != 0; outRoute.Operation = isAdd ? RouteUpdateOperation.Add : RouteUpdateOperation.Remove; outgoingRoutes.Add(outRoute); } if ((interactiveMode & listen) != 0) { IncomingAudioRoute inRoute = new IncomingAudioRoute(this.TargetUriEndpoint); inRoute.IsDtmfEnabled = (interactiveMode & InteractionMode.ListenSpeechAndDtmf) != 0; inRoute.Operation = isAdd ? RouteUpdateOperation.Add : RouteUpdateOperation.Remove; incomingRoutes.Add(inRoute); } m_serviceChannelCall.AudioVideoMcuRouting.BeginUpdateAudioRoutes( outgoingRoutes, incomingRoutes, delegate(IAsyncResult ar) { task.DoFinalStep( delegate() { m_serviceChannelCall.AudioVideoMcuRouting.EndUpdateAudioRoutes(ar); }); }, null); }); }
private void NewAttendeeCallEstablishCompleted(IAsyncResult result) { var newParticipantCall = (AudioVideoCall)result.AsyncState; try { newParticipantCall.EndEstablish(result); } catch (FailureResponseException failureResEx) { // TODO (Left to the reader): Write actual handling code for the // occurrence. Console.WriteLine("A FailureResponseException occured when ending the establishment of an Av " + "call for a new participant: {0}", failureResEx.ToString()); } catch (OperationFailureException opFailEx) { // TODO (Left to the reader): Write actual handling code for the // occurrence. Console.WriteLine("An OperationFailureException occured when ending the establishment of an " + "Av call for a new participant: {0}", opFailEx.ToString()); } catch (OperationTimeoutException opTimeoutEx) { // TODO (Left to the reader): Write actual handling code for the // occurrence. Console.WriteLine("An OperationTimeoutException occured when ending the establishment of an " + "Av call for a new participant: {0}", opTimeoutEx.ToString()); } catch (RealTimeException realTimeEx) { // TODO (Left to the reader): Write actual handling code for the // occurrence. Console.WriteLine("A RealTimeException occured when ending the establishment of an Av call " + "for a new participant: {0}", realTimeEx.ToString()); } // Retrieve the Participant endpoint from the call's Application // context var newAttendeeParticipantEndpoint = (ParticipantEndpoint)newParticipantCall.ApplicationContext; Console.WriteLine("ID of the new call = {0}", newParticipantCall.CallId); _trustedParticipantCallIDToParticipantUriStore.Add(newParticipantCall.CallId, newAttendeeParticipantEndpoint.Participant.Uri); Console.WriteLine("Av Call Established to communicate with the new conference participant."); //Create a new outgoing route which dictates who the app is speaking // to via this call. OutgoingAudioRoute newOutgoingRoute = new OutgoingAudioRoute(newAttendeeParticipantEndpoint); // We're not going to send DTMF to the participant so disable DTMF newOutgoingRoute.IsDtmfEnabled = false; //Add this outbound route. newOutgoingRoute.Operation = RouteUpdateOperation.Add; //Create a new incoming route which dictates who the app is // listening to via this call. IncomingAudioRoute newIncomingRoute = new IncomingAudioRoute(newAttendeeParticipantEndpoint); // The app is listening for DTMF input from the user so enable it on // the incoming route. newIncomingRoute.IsDtmfEnabled = true; //Add this incoming route. newIncomingRoute.Operation = RouteUpdateOperation.Add; Console.WriteLine("Updating the Audio Routes to communicate with the new conference participant: " + "{0}", newAttendeeParticipantEndpoint.Participant.DisplayName); newParticipantCall.AudioVideoMcuRouting.BeginUpdateAudioRoutes( new List <OutgoingAudioRoute> { newOutgoingRoute }, new List <IncomingAudioRoute> { newIncomingRoute }, UpdateAudioRoutesCompleted, newParticipantCall); }