コード例 #1
0
        private void call_CallStateChanged(object sender, CallStateChangedArgs e)
        {
            InvokeGUIThread(mymsg = "Call state: {0}." + e.State);

            if (e.State == CallState.Answered)
            {
                StartDevices();
                MediaReciever.AttachToCall(PhoneCall);
                MediaSender.AttachToCall(PhoneCall);

                InvokeGUIThread(mymsg = "Call started" + e.State);
            }

            if (e.State.IsCallEnded() == true)
            {
                StopDevices();

                MediaReciever.Detach();
                MediaSender.Detach();

                WireDownCallEvents();

                PhoneCall             = null;
                InvokeGUIThread(mymsg = "Call ended" + e.State);
            }
        }
コード例 #2
0
 /// <summary>
 /// Attaches the media handlers to the given phone call.
 /// </summary>
 public void AttachAudio(IPhoneCall call)
 {
     AudioEnhancer.Refresh();
     AudioEnhancer.Start();
     _phoneCallAudioSender.AttachToCall(call);
     _phoneCallAudioReceiver.AttachToCall(call);
 }
コード例 #3
0
        private void CallAnswered()
        {
            _callID = _call.CallID;
            _log.Info("Call Answered. Call ID: " + _callID);

            _log.Info(String.Format("Recording to {0}", _wavFileName));
            _audioReceiver.AttachToCall(_call);
            _wavRecorder.DataSent += WavRecorderDataReceived;
            _wavRecorder.StartStreaming();
        }
コード例 #4
0
ファイル: RealPhone.cs プロジェクト: 324275217/voip-phone
        private void call_CallStateChanged(object sender, CallStateChangedArgs e)
        {
            switch (e.State)
            {
            case CallState.Ringing:
                StateChanged?.Invoke(PhoneState.Ringing);
                break;

            case CallState.InCall:
                StateChanged?.Invoke(PhoneState.InCall);
                break;

            default:
                StateChanged?.Invoke(PhoneState.Other);
                break;
            }
            RaiseMessage?.Invoke(e.State.ToString());

            if (e.State == CallState.Answered)
            {
                if (microphone != null)
                {
                    microphone.Start();
                }

                if (speaker != null)
                {
                    speaker.Start();
                }

                mediaSender.AttachToCall(call);
                mediaReceiver.AttachToCall(call);
                return;
            }

            if (e.State.IsCallEnded())
            {
                if (microphone != null)
                {
                    microphone.Stop();
                }

                if (speaker != null)
                {
                    speaker.Stop();
                }

                mediaSender.Detach();
                mediaReceiver.Detach();

                UnsubscribeFromCallEvents(sender as IPhoneCall);
                call = null;
                StateChanged?.Invoke(PhoneState.CallEnded);
            }
        }
コード例 #5
0
ファイル: Form2.cs プロジェクト: adriankubaszewski/TIP-Voiper
        static void SetupDevices()
        {
            microphone.Start();
            connector.Connect(microphone, mediaSender);

            speaker.Start();
            connector.Connect(mediaReceiver, speaker);

            mediaSender.AttachToCall(call);
            mediaReceiver.AttachToCall(call);
        }
コード例 #6
0
ファイル: Softphone.cs プロジェクト: toannd18/PBXForm
        private void call_CallStateChanged(object sender, CallStateChangedArgs e)
        {
            _message = new List <string>();
            _message.Add(e.State.ToString());
            StopMp3Ring();
            if (e.State == CallState.Answered)
            {
                StartDevices();

                _mediaReceiver.AttachToCall(_call);
                _mediaSender.AttachToCall(_call);

                //InvokeGUIThread(() => { lb_Log.Items.Add("Call started."); });
            }

            if (e.State == CallState.InCall)
            {
                //btn_Hold.Enabled = true;
                //btn_Hold.Text = "Hold";
                StartDevices();
            }

            if (e.State.IsRinging())
            {
                StartMP3Ring("Ringing.mp3");
            }
            if (e.State == CallState.Busy)
            {
                StartMP3Ring("Busy.mp3");
            }

            if (e.State.IsCallEnded())
            {
                //_localHeld = false;

                StopDevices();

                _mediaReceiver.Detach();
                _mediaSender.Detach();

                WireDownCallEvents();

                _call = null;

                //InvokeGUIThread(() => { lb_Log.Items.Add("Call ended."); tb_Display.Text = string.Empty; });
            }

            if (e.State == CallState.LocalHeld)
            {
                StopDevices();
            }
        }
コード例 #7
0
        /// <summary>
        /// Occurs when the phone call state has changed.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void call_CallStateChanged(object sender, VoIPEventArgs <CallState> e)
        {
            InvokeGUIThread(() => { labelCallStateInfo.Text = e.Item.ToString(); });

            switch (e.Item)
            {
            case CallState.InCall:
                if (microphone != null)
                {
                    microphone.Start();
                }
                connector.Connect(microphone, mediaSender);

                if (speaker != null)
                {
                    speaker.Start();
                }
                connector.Connect(mediaReceiver, speaker);

                mediaSender.AttachToCall(call);
                mediaReceiver.AttachToCall(call);

                break;

            case CallState.Completed:
                if (microphone != null)
                {
                    microphone.Stop();
                }
                connector.Disconnect(microphone, mediaSender);
                if (speaker != null)
                {
                    speaker.Stop();
                }
                connector.Disconnect(mediaReceiver, speaker);

                mediaSender.Detach();
                mediaReceiver.Detach();

                WireDownCallEvents();
                call = null;

                InvokeGUIThread(() => { labelDialingNumber.Text = string.Empty; });
                break;

            case CallState.Cancelled:
                WireDownCallEvents();
                call = null;
                break;
            }
        }
コード例 #8
0
        private void call_CallStateChanged(object sender, CallStateChangedArgs e)
        {
            if (e.State == CallState.Answered)
            {
                //player.Stop();
                StartDevices();

                _mediaReceiver.AttachToCall(frmSipAccount._call);
                _mediaSender.AttachToCall(frmSipAccount._call);


                AsynThread(() => { lb_Log.Items.Add("Call started."); });
            }
            if (e.State == CallState.InCall)
            {
                //isCalling = false;
                player.Stop();
                StartDevices();
            }
            if (e.State.IsCallEnded())
            {
                StopDevices();

                _mediaReceiver.Detach();
                _mediaSender.Detach();
                UnSubcribeCallEvents();
            }
            if (e.State == CallState.LocalHeld)
            {
                AsynThread(() => { lb_Log.Items.Add("Call Hold."); });
                StopDevices();
            }
            if (e.State == CallState.Ringing)
            {
                AsynThread(() => {
                    //if (isCalling)
                    //    playSound(calling);
                    //else
                    playSound(ringing);
                });
            }
            DispatchAsync(() =>
            {
                var handler = CallStateChanged;
                if (handler != null)
                {
                    handler(this, e);
                }
            });
        }
コード例 #9
0
        /// <summary>
        /// Connecting the microphone and speaker to the call
        /// </summary>
        private void ConnectDevicesToCall()
        {
            if (microphone != null)
            {
                microphone.Start();
            }
            connector.Connect(microphone, mediaSender);

            if (speaker != null)
            {
                speaker.Start();
            }
            connector.Connect(mediaReceiver, speaker);

            mediaSender.AttachToCall(call);
            mediaReceiver.AttachToCall(call);
        }
コード例 #10
0
ファイル: Form1.cs プロジェクト: kterdal/VOIP-Softphone
        private void call_CallStateChanged(object sender, CallStateChangedArgs e)
        {
            InvokeGUIThread(() => { lb_Log.Items.Add("Callstate changed." + e.State.ToString()); tb_Display.Text = e.State.ToString(); });

            if (e.State == CallState.Answered)
            {
                btn_Hold.Enabled = true;
                btn_Hold.Text    = "Hold";

                StartDevices();

                mediaReceiver.AttachToCall(call);
                mediaSender.AttachToCall(call);


                InvokeGUIThread(() => { lb_Log.Items.Add("Call started."); });
            }

            if (e.State == CallState.InCall)
            {
                btn_Hold.Enabled = true;
                btn_Hold.Text    = "Hold";
                StartDevices();
            }

            if (e.State.IsCallEnded() == true)
            {
                localHeld = false;

                StopDevices();

                mediaReceiver.Detach();
                mediaSender.Detach();

                WireDownCallEvents();

                call = null;

                InvokeGUIThread(() => { lb_Log.Items.Add("Call ended."); tb_Display.Text = string.Empty; });
            }

            if (e.State == CallState.LocalHeld)
            {
                StopDevices();
            }
        }
コード例 #11
0
ファイル: Home.cs プロジェクト: pawlikx/VoiceCommunicator
        static void SetupDevices()
        {
            if (x > 0)
            {
                OzekiInit();
                Console.WriteLine("setupDevices With OZEKI ####################################");
            }


            x++;
            microphone.Start();
            connector.Connect(microphone, mediaSender);

            speaker.Start();
            connector.Connect(mediaReceiver, speaker);

            mediaSender.AttachToCall(call);
            mediaReceiver.AttachToCall(call);
        }
コード例 #12
0
ファイル: Form1.cs プロジェクト: meps1211/test
        void call_CallStateChanged(object sender, CallStateChangedArgs e)
        {
            InvokeGUIThread(() => { lbl_CallState.Text = e.State.ToString(); });

            if (e.State == CallState.Answered)
            {
                StartDevices();
                _mediaSender.AttachToCall(_call);
                _mediaReceiver.AttachToCall(_call);

                InvokeGUIThread(() => { tb_Display.Text = "In call with: " + ((IPhoneCall)sender).DialInfo.Dialed; });
            }
            else if (e.State == CallState.InCall)
            {
                StartDevices();
            }

            if (e.State == CallState.LocalHeld || e.State == CallState.InactiveHeld)
            {
                StopDevices();
                InvokeGUIThread(() => { btn_Hold.Text = "Unhold"; });
            }
            else
            {
                InvokeGUIThread(() => { btn_Hold.Text = "Hold"; });
            }

            if (e.State.IsCallEnded())
            {
                StopDevices();

                _mediaSender.Detach();
                _mediaReceiver.Detach();

                WireDownCallEvents();

                _call = null;

                InvokeGUIThread(() => { tb_Display.Text = String.Empty; });
                ClearUserInfos();
            }
        }
コード例 #13
0
        public void SetupDevices()
        {
            if (x > 0)
            {
                OzekiInitialization();
            }
            Console.WriteLine("setupDevices1");

            x++;
            microphone.Start();
            connector.Connect(microphone, mediaSender);
            Console.WriteLine("setupDevices2");

            speaker.Start();
            connector.Connect(mediaReceiver, speaker);
            Console.WriteLine("setupDevices3");

            mediaSender.AttachToCall(call);
            Console.WriteLine("setupDevices4");
            mediaReceiver.AttachToCall(call);
            Console.WriteLine("setupDevices5");
        }
コード例 #14
0
        private void SetupDevices()
        {
            microphone.Start();
            connector.Connect(microphone, mediaSender);

            speaker.Start();
            connector.Connect(mediaReceiver, speaker);

            mediaSender.AttachToCall(call);
            mediaReceiver.AttachToCall(call);

            Application.Current.Dispatcher.Invoke(() =>
            {
                uplynelo_sekund                 = 0;
                CzasRozmowy_Label.Content       = "Czas rozmowy: " + TimeSpan.FromSeconds(uplynelo_sekund).ToString(@"hh\:mm\:ss");
                ZakonczRozmowe_Button.IsEnabled = true;
                if (rozmawiajacyUzytkownik != null)//my dzwonimy
                {
                    //rozmawiajacyUzytkownik.wiadomosci.Add(DateTime.Now.ToShortTimeString() + " rozpoczęto rozmowę");
                    call.OtherParty.UserName = rozmawiajacyUzytkownik.login;
                }
                else//ktos dzwoni
                {
                    var kontakt            = listaKontaktow.Find(X => X.login == call.OtherParty.UserName);
                    rozmawiajacyUzytkownik = kontakt;
                }
                CzasRozmowy_Label.Visibility = Visibility.Visible;
                if (stoper != null)
                {
                    stoper.Stop();
                }
                stoper          = new System.Windows.Threading.DispatcherTimer();
                stoper.Interval = TimeSpan.FromSeconds(1);
                stoper.Tick    += Stoper_Tick;
                stoper.Start();
            });
        }
コード例 #15
0
ファイル: Softphone.cs プロジェクト: papillon88/SIP_project
        /// <summary>
        /// This will be called when the state of the call call has changed.
        /// </summary>
        /// <remarks>
        /// In this sample only three states will be handled: Answered, InCall, Ended
        ///
        /// Answered: when the call has been answered, the audio devices will be started and attached to the call.
        /// It is required to comminicate with the other party and hear them.
        /// The devices are connected at softphone initialization time,
        /// so no need to connect them every time when a call is being answered.
        ///
        /// InCall: when the call is in an active state, the audio deveices will be started.
        ///
        /// Ended: when the call ends, the audio devices will be stopped and detached from the call.
        /// </remarks>
        private void call_CallStateChanged(object sender, CallStateChangedArgs e)
        {
            // the call has been answered
            if (e.State == CallState.Answered)
            {
                StartDevices();

                mediaReceiver.AttachToCall(call);
                mediaSender.AttachToCall(call);
            }

            // the call is in active communication state
            // IMPORTANT: this state can occur multiple times. for example when answering the call or the call has been taken off hold.
            if (e.State == CallState.InCall)
            {
                StartDevices();
            }


            // the call has ended
            if (e.State.IsCallEnded())
            {
                if (call != null)
                {
                    CallFinished();
                }
            }

            DispatchAsync(() =>
            {
                var handler = CallStateChanged;
                if (handler != null)
                {
                    handler(this, e);
                }
            });
        }
コード例 #16
0
 public void AttachReceiveCall()
 {
     videoReceiver.AttachToCall(call);
     audioReceiver.AttachToCall(call);
 }
コード例 #17
0
ファイル: frmSoftphone.cs プロジェクト: rosauceda/Softphone-1
        private void call_CallStateChanged(object sender, CallStateChangedArgs e)
        {
            try
            {
                InvokeGUIThread(() => { lb_Log.Items.Add("Callstate changed." + e.State.ToString()); });// tb_Display.Text = e.State.ToString();

                if (e.State == CallState.Answered)
                {
                    player.Stop();
                    StartDevices();

                    _mediaReceiver.AttachToCall(_call);
                    _mediaSender.AttachToCall(_call);

                    SetupAnswered();
                    InvokeGUIThread(() => { lb_Log.Items.Add("Call started."); });
                }

                if (e.State == CallState.InCall)
                {
                    player.Stop();
                    StartDevices();
                    InvokeGUIThread(() =>
                    {
                    });
                }

                if (e.State.IsCallEnded() || e.State == CallState.Rejected)
                {
                    StopDevices();

                    _mediaReceiver.Detach();
                    _mediaSender.Detach();

                    UnSubcribedCallEvents();
                    if (isInComingCompleted)
                    {
                        isInComingCompleted = false;
                        InvokeGUIThread(() =>
                        {
                        });
                    }
                    InvokeGUIThread(() =>
                    {
                    });
                    _call = null;
                    EndCalling();
                    InvokeGUIThread(() =>
                    {
                        lb_Log.Items.Add("Call ended.");
                        playSound(hangup);
                    });
                }

                if (e.State == CallState.LocalHeld)
                {
                    InvokeGUIThread(() => { lb_Log.Items.Add("Call Holding."); });
                    StopDevices();
                }
                if (e.State == CallState.RemoteHeld)
                {
                    InvokeGUIThread(() => { lb_Log.Items.Add("Callee Holding."); });
                    InvokeGUIThread(() => { playSound(holding); });
                }
                if (e.State == CallState.Ringing)
                {
                    InvokeGUIThread(() =>
                    {
                        if (isCalling)
                        {
                            playSound(calling);
                        }
                        else
                        {
                            playSound(ringing);
                        }
                    });
                }

                DispatchAsync(() =>
                {
                    var handler = CallStateChanged;
                    if (handler != null)
                    {
                        handler(this, e);
                    }
                });
            }
            catch (Exception ex)
            {
            }
        }
コード例 #18
0
        private void Call_CallStateChanged(object sender, CallStateChangedArgs e)
        {
            IPhoneCall grCall = sender as IPhoneCall;

            _grCall = grCall;
            MyCallState tmp = MyCallState.DoNotthing;

            if (e.State == CallState.Answered)
            {
                StartDevices();
                mediaReceiver.AttachToCall(call);
                mediaSender.AttachToCall(call);
                videoReceiver.AttachToCall(call);
                videoSender.AttachToCall(call);
                tmp = MyCallState.Answered;
            }

            if (e.State == CallState.InCall)
            {
                StartDevices();
                tmp = MyCallState.InCall;
                CallDuration();
            }

            if (e.State.IsCallEnded() == true)
            {
                StopDevices();
                mediaReceiver.Detach();
                mediaSender.Detach();
                videoSender.Detach();
                videoReceiver.Detach();
                WireDownCallEvents();
                call = null;
                tmp  = MyCallState.CallEnd;
                Instance.IsLocalCameraUsed = false;
                timer.Stop();
            }

            if (e.State == CallState.LocalHeld)
            {
                StopDevices();
            }
            if (e.State == CallState.Busy)
            {
                StopDevices();
                tmp = MyCallState.Busy;
            }
            if (e.State == CallState.Cancelled)
            {
                StopDevices();
                tmp = MyCallState.Canceled;
            }
            if (e.State == CallState.Completed)
            {
                tmp = MyCallState.CallEnd;
            }

            if (CallStateChange != null)
            {
                CallStateChange.Invoke(tmp);
            }
        }
コード例 #19
0
ファイル: frmTelefono.cs プロジェクト: Mbmaldon/LxJuridico
        void call_CallStateChanged(object sender, CallStateChangedArgs e)
        {
            InvokeGUIThread(() => { lbl_CallState.Text = e.State.ToString(); lblEstatusLlamada.Text = e.State.ToString(); });

            if (e.State == CallState.Answered)
            {
                InvokeGUIThread(() => {
                    wplayer.controls.stop();
                    crearFolio();
                    ALlamadaData.bCurso = true;

                    string sRuta = string.Format(@"{0}\mpy\records\nws", Path.GetTempPath());
                    if (!Directory.Exists(sRuta))
                    {
                        Directory.CreateDirectory(sRuta);
                    }
                });

                StartDevices();
                SendDTMFSingnal();

                sFechaInicio = DateTime.Now;
                sRecordName  = AProspeccionData.bCurso ? string.Format("pcll-{1}.wav", Path.GetTempPath(), AProspeccionData.iIdLlamada) : string.Format("Folio-{0}-{1}{2}{3}{4}{5}{6}.wav", iIdFolio, sFechaInicio.Day, sFechaInicio.Month, sFechaInicio.Year, sFechaInicio.Hour, sFechaInicio.Minute, sFechaInicio.Second);
                filename     = string.Format(@"{0}\mpy\records\nws\{1}", Path.GetTempPath(), sRecordName);

                recorder = new WaveStreamRecorder(filename);  // new recorder object
                _connector.Connect(_microphone, recorder);    // connects the outgoing voice to the recorder
                _connector.Connect(_mediaReceiver, recorder); // connects the incoming voice to the recorder

                _mediaSender.AttachToCall(_call);
                _mediaReceiver.AttachToCall(_call);
                recorder.Start();  // starts the recording

                InvokeGUIThread(() => {
                    timer1.Start();
                    txtDisplay.Text     = "" + ((IPhoneCall)sender).DialInfo.SIPCallerID.DisplayName;
                    lblExtEntrante.Text = "" + ((IPhoneCall)sender).DialInfo.SIPCallerID.DisplayName;

                    if (!AProspeccionData.bCurso)
                    {
                        // Valida despues de mostrar la modal para registrar la llamada
                        if (RegistrarLlamadaModal.Show(iIdFolio, filename) == DialogResult.Yes)
                        {
                            Cliente ACliente = new Cliente();
                            Caso NoCliente;
                            if (bSeguimiento)
                            {
                                NoCliente = new Caso().ClienteCaso(iIdFolioSeguimiento);
                            }
                            else
                            {
                                NoCliente = new Caso().ClienteCaso(iIdFolio);
                            }
                        }
                    }
                });
            }
            else if (e.State == CallState.InCall)
            {
                StartDevices();
            }

            if (e.State == CallState.LocalHeld || e.State == CallState.InactiveHeld)
            {
                StopDevices();
                InvokeGUIThread(() => {
                    lnkHold.Text         = "Unhold";
                    lnkHold.Image        = Properties.Resources.resume_button_48px;
                    lnkHold.NoFocusImage = Properties.Resources.resume_button_48px;
                });
            }
            else
            {
                InvokeGUIThread(() => {
                    lnkHold.Text         = "Hold";
                    lnkHold.Image        = Properties.Resources.pause_48px;
                    lnkHold.NoFocusImage = Properties.Resources.pause_48px;
                });
            }

            if (e.State.IsCallEnded())
            {
                StopDevices();

                _mediaSender.Detach();
                _mediaReceiver.Detach();

                WireDownCallEvents();

                if (recorder != null)
                {
                    recorder.Dispose();
                    recorder = null;
                }

                _call = null;

                timer1.Stop();

                InvokeGUIThread(() => {
                    wplayer.controls.stop();
                    txtDisplay.Text     = String.Empty;
                    lblExtEntrante.Text = string.Empty;
                    lblTiempo.Text      = string.Empty;

                    if (pnlLlamada.Visible == true)
                    {
                        frmTelefono.Animate2(pnlLlamada, frmTelefono.Effect.Slide, 150, 360);
                        frmTelefono.Animate(pnlKeyPad, frmTelefono.Effect.Slide, 150, 360);
                    }

                    lnkPickUpInCall.Visible      = true;
                    lnkVolverLLamada.Visible     = false;
                    pnlTransferirLlamada.Visible = false;
                    txtNoTransferir.Text         = string.Empty;
                    lnkConfigurar.Enabled        = true;
                    lnkHangUp.Location           = new Point(150, 94);
                    AProspeccionData.bCurso      = false;

                    string sFilePath = "";
                    if (bSeguimiento && iIdFolioSeguimiento != 0)
                    {
                        sFilePath = string.Format(@"{0}\mpy\records\nws\Folio-{1}-{2}{3}{4}{5}{6}{7}.wav", Path.GetTempPath(), iIdFolioSeguimiento, sFechaInicio.Day, sFechaInicio.Month, sFechaInicio.Year, sFechaInicio.Hour, sFechaInicio.Minute, sFechaInicio.Second);
                        File.Move(filename, sFilePath);
                        CasoHistorial _UpdRecord = new CasoHistorial();
                        _UpdRecord.UpdateHistorialRecord(iIdHistorialFolio, sFilePath);
                    }

                    if (ALlamadaData.bCurso)
                    {
                        if (sFilePath == "")
                        {
                            string FullPath = string.Format("{0}/{1}/Records/", FTPCredentials.Path, ConnectionString.FolderConnection);
                            FTPServer.Upload(FullPath, FTPCredentials.User, FTPCredentials.Password, Path.GetFileName(filename), filename);
                            File.Delete(filename);
                        }
                        else
                        {
                            string FullPath = string.Format("{0}/{1}/Records/", FTPCredentials.Path, ConnectionString.FolderConnection);
                            FTPServer.Upload(FullPath, FTPCredentials.User, FTPCredentials.Password, Path.GetFileName(sFilePath), sFilePath);
                            File.Delete(sFilePath);
                        }
                        ALlamadaData.bCurso = false;
                    }
                });
            }
        }
コード例 #20
0
        public void call_CallStateChanged(object sender, CallStateChangedArgs e)
        {
            InvokeGUIThread(() => { lb_Log.Items.Add("Callstate changed." + e.State.ToString()); }); // tb_Display.Text = e.State.ToString();

            if (e.State == CallState.Answered)
            {
                player.Stop();
                StartDevices();

                _mediaReceiver.AttachToCall(_call);
                _mediaSender.AttachToCall(_call);


                InvokeGUIThread(() => { lb_Log.Items.Add("Call started."); });
            }

            if (e.State == CallState.InCall)
            {
                isCalling = false;
                player.Stop();
                StartDevices();
                InvokeGUIThread(() => {
                    btnHangup.Enabled   = true;
                    btnHold.Enabled     = true;
                    btnHangup.BackColor = Color.Red;
                    btnHangup.ForeColor = Color.Snow;
                    btnHold.BackColor   = Color.Red;
                    btnHold.ForeColor   = Color.Snow;
                });
            }

            if (e.State.IsCallEnded())
            {
                StopDevices();

                _mediaReceiver.Detach();
                _mediaSender.Detach();

                WireDownCallEvents();
                if (isInComingCompleted)
                {
                    isInComingCompleted = false;
                    InvokeGUIThread(() =>
                    {
                        btnAccpect.Enabled   = false;
                        btnAccpect.BackColor = Color.Teal;
                        btnAccpect.ForeColor = Color.DimGray;
                        btnHold.Enabled      = false;
                        btnHangup.Enabled    = false;
                        btnHold.BackColor    = Color.Teal;
                        btnHold.ForeColor    = Color.DimGray;
                        btnHangup.BackColor  = Color.Teal;
                        btnHangup.ForeColor  = Color.DimGray;
                    });
                }
                InvokeGUIThread(() =>
                {
                    btnHold.Enabled     = false;
                    btnHangup.Enabled   = false;
                    btnHold.BackColor   = Color.Teal;
                    btnHold.ForeColor   = Color.DimGray;
                    btnHangup.BackColor = Color.Teal;
                    btnHangup.ForeColor = Color.DimGray;
                });
                _call = null;

                InvokeGUIThread(() => {
                    lb_Log.Items.Add("Call ended.");
                    playSound(hangup);
                });
            }

            if (e.State == CallState.LocalHeld)
            {
                InvokeGUIThread(() => { lb_Log.Items.Add("Call Hold."); });
                StopDevices();
            }
            if (e.State == CallState.RemoteHeld)
            {
                InvokeGUIThread(() => { playSound(holding); });
            }
            if (e.State == CallState.Ringing)
            {
                InvokeGUIThread(() => {
                    if (isCalling)
                    {
                        playSound(calling);
                    }
                    else
                    {
                        playSound(ringing);
                    }
                });
            }

            DispatchAsync(() =>
            {
                var handler = CallStateChanged;
                if (handler != null)
                {
                    handler(this, e);
                }
            });
        }
コード例 #21
0
        /// <summary>
        /// This will be called when the state of the call call has changed.
        /// </summary>
        /// <remarks>
        /// In this sample only three states will be handled: Answered, InCall, Ended
        ///
        /// Answered: when the call has been answered, the audio devices will be started and attached to the call.
        /// It is required to comminicate with the other party and hear them.
        /// The devices are connected at softphone initialization time,
        /// so no need to connect them every time when a call is being answered.
        ///
        /// InCall: when the call is in an active state, the audio deveices will be started.
        ///
        /// Ended: when the call ends, the audio devices will be stopped and detached from the call.
        /// </remarks>
        private void call_CallStateChanged(object sender, CallStateChangedArgs e)
        {
            // the call has been answered
            if (e.State == CallState.Answered)
            {
                StartDevices();
                MediaHandlers.StopRingback();
                _mediaReceiver.AttachToCall(_call);
                _mediaSender.AttachToCall(_call);

                // For further information about the calling of the ConnectMedia(), please check the implementation of this method.
                ConnectMedia();
            }

            if (e.State == CallState.Ringing)
            {
                StartDevices();
                MediaHandlers.StartRingback();

                //  MediaHandlers.AttachAudio(_call);
                //  MediaHandlers.AttachVideo(_call);

                _mediaReceiver.AttachToCall(_call);
                _mediaSender.AttachToCall(_call);

                // For further information about the calling of the ConnectMedia(), please check the implementation of this method.
                ConnectMedia();
            }
            if (e.State == CallState.RingingWithEarlyMedia)
            {
                MediaHandlers.StartRingback();
                //  MediaHandlers.AttachAudio(_call);
                //  MediaHandlers.AttachVideo(_call);
                // For further information about the calling of the ConnectMedia(), please check the implementation of this method.
                ConnectMedia();
            }

            // the call is in active communication state
            // IMPORTANT: this state can occur multiple times. for example when answering the call or the call has been taken off hold.
            if (e.State == CallState.InCall)
            {
                StartDevices();
                // MediaHandlers.StopRingback();
            }

            // the call has ended
            if (e.State.IsCallEnded())
            {
                if (_call != null)
                {
                    CallFinished();
                }
            }

            DispatchAsync(() =>
            {
                var handler = CallStateChanged;
                if (handler != null)
                {
                    handler(this, e);
                }
            });
        }