示例#1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="funcion"></param>
        /// <param name="via"></param>
        /// <param name="fileName"></param>
        /// <param name="fileLength"></param>
        public void DoFunction(FunctionReplay funcion, ViaReplay via, string fileName, long fileLength)
        {
            switch (funcion)
            {
            case FunctionReplay.Stop:
                if (_ReplayTone != -1)
                {
                    Top.Mixer.Unlink(_ReplayTone);
                    SipAgent.DestroyWavPlayer(_ReplayTone);
                    _ReplayTone          = -1;
                    _Replaying           = false;
                    _StopPlaying.Enabled = false;

                    General.SafeLaunchEvent(PlayingChanged, this, new StateMsg <bool>(false));
                    if (Settings.Default.SNMPEnabled == 1)
                    {
                        Top.WorkingThread.Enqueue("SetSnmp", delegate()
                        {
                            string evento = Top.Cfg.PositionId + "_0";
                            General.SafeLaunchEvent(SetSnmpString, this, new SnmpStringMsg <string, string>(Settings.Default.StartingReplayOid, evento));
                        });
                    }
                }
                break;

            case FunctionReplay.Play:
                if (_ReplayTone == -1)
                {
                    _ReplayTone = SipAgent.CreateWavPlayer(fileName, true);
                    Top.Mixer.LinkReplay(_ReplayTone, via);
                    _Replaying = true;

                    _StopPlaying           = new Timer(1000 * fileLength / 16000);
                    _StopPlaying.Elapsed  += new ElapsedEventHandler(StopPlayingElapsed);
                    _StopPlaying.AutoReset = false;
                    _StopPlaying.Enabled   = true;

                    General.SafeLaunchEvent(PlayingChanged, this, new StateMsg <bool>(true));
                    if (Settings.Default.SNMPEnabled == 1)
                    {
                        Top.WorkingThread.Enqueue("SetSnmp", delegate()
                        {
                            string evento = Top.Cfg.PositionId + "_1";
                            General.SafeLaunchEvent(SetSnmpString, this, new SnmpStringMsg <string, string>(Settings.Default.StartingReplayOid, evento));
                        });
                    }
                }
                break;

            case FunctionReplay.DisableSupervisor:

            case FunctionReplay.Pause:
                /* De momento no se va a implementar */
                break;
            }
        }
示例#2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="rxSt"></param>
        /// <param name="txSt"></param>
        private void SetState(LcRxState rxSt, LcTxState txSt)
        {
            bool changed = false;

            _OldRxState = _RxState;
            _OldTxState = _TxState;
            if (_RxState != rxSt)
            {
                _RxState = rxSt;
                changed  = true;

                if (_TxState == txSt)
                {
                    if ((rxSt != LcRxState.Unavailable) && (_TxState == LcTxState.Unavailable))
                    {
                        txSt = LcTxState.Idle;
                    }
                    else if ((rxSt == LcRxState.Unavailable) && (_TxState == LcTxState.Idle))
                    {
                        txSt = LcTxState.Unavailable;
                    }
                }
            }

            if (_TxState != txSt)
            {
                if (_Tone >= 0)
                {
                    Top.Mixer.Unlink(_Tone);
                    SipAgent.DestroyWavPlayer(_Tone);
                    _Tone = -1;
                }

                switch (txSt)
                {
                case LcTxState.Congestion:
                    _Tone = SipAgent.CreateWavPlayer("Resources/Tones/Congestion.wav", true);
                    Top.Mixer.Link(_Tone, MixerDev.SpkLc, MixerDir.Send, Mixer.LC_PRIORITY, FuentesGlp.RxLc);
                    break;

                case LcTxState.Busy:
                    _Tone = SipAgent.CreateWavPlayer("Resources/Tones/Busy.wav", true);
                    Top.Mixer.Link(_Tone, MixerDev.SpkLc, MixerDir.Send, Mixer.LC_PRIORITY, FuentesGlp.RxLc);
                    break;
                }

                _TxState = txSt;
                changed  = true;
            }

            if (changed)
            {
                General.SafeLaunchEvent(StateChanged, this);
            }
        }
示例#3
0
        private void OnLcStateChanged(object sender)
        {
            LcPosition lc = (LcPosition)sender;

            _AnyActiveLcRx = DetectedAnyLC();// Miguel

            switch (lc.TxState)
            {
            case LcTxState.Out:
            case LcTxState.Busy:
            case LcTxState.Congestion:
            case LcTxState.Tx:
                Debug.Assert((_ActiveCall == null) || (_ActiveCall == lc));
                _ActiveCall = lc;
                Activity    = true;

                if (lc.TxState == LcTxState.Tx && lc.OldTxState != LcTxState.Tx)
                {
                    Top.Recorder.SessionGlp(FuentesGlp.TxLc, true);

                    Top.WorkingThread.Enqueue("SetSnmp", delegate()
                    {
                        string snmpString = Top.Cfg.PositionId + "_" + "LC" + "_" + lc.Literal + "_" + lc.TxState.ToString();
                        General.SafeLaunchEvent(SetSnmpString, this, new SnmpStringMsg <string, string>(Settings.Default.OutgoingTfCallOid, snmpString));
                    });
                }

                break;

            default:
                if (_ActiveCall == lc)
                {
                    _ActiveCall = null;
                    Activity    = false;

                    if (lc.OldTxState != LcTxState.Unavailable && lc.TxState == LcTxState.Idle)
                    {
                        // Tratamiento para cuando mientras se está transmitiendo,
                        // el colateral se cae.
                        if (lc.OldTxState == LcTxState.Tx && _TonoFalsaManiobra)
                        {
                            _TonoFalsaManiobra = false;
                            int _BadOperationTone = SipAgent.CreateWavPlayer("Resources/Tones/Falsa_Maniobra.wav", true);
                            Top.Mixer.Link(_BadOperationTone, MixerDev.SpkLc, MixerDir.Send, Mixer.RD_PRIORITY, FuentesGlp.RxLc);

                            Top.WorkingThread.Enqueue("Wait", delegate()
                            {
                                System.Threading.Thread.Sleep(500);
                            });

                            Top.Mixer.Unlink(_BadOperationTone);
                            SipAgent.DestroyWavPlayer(_BadOperationTone);
                        }

                        Top.Recorder.SessionGlp(FuentesGlp.TxLc, false);
                        Top.WorkingThread.Enqueue("SetSnmp", delegate()
                        {
                            string snmpString = Top.Cfg.PositionId + "_" + "LC" + "_" + lc.Literal + "_" + lc.TxState.ToString();
                            General.SafeLaunchEvent(SetSnmpString, this, new SnmpStringMsg <string, string>(Settings.Default.OutgoingTfCallOid, snmpString));
                        });
                    }
                }
                break;
            }

            // Sólo para gestión SNMP
            if (lc.OldRxState != LcRxState.Unavailable)
            {
                switch (lc.RxState)
                {
                case LcRxState.Rx:
                    if (lc.OldRxState != LcRxState.Rx)
                    {
                        Top.WorkingThread.Enqueue("SetSnmp", delegate()
                        {
                            string snmpString = Top.Cfg.PositionId + "_" + "LC" + "_" + lc.Literal + "_" + lc.RxState.ToString();
                            General.SafeLaunchEvent(SetSnmpString, this, new SnmpStringMsg <string, string>(Settings.Default.IncommingTfCallOid, snmpString));
                        });
                    }
                    break;

                case LcRxState.Idle:
                    if (lc.OldRxState == LcRxState.Rx)
                    {
                        Top.WorkingThread.Enqueue("SetSnmp", delegate()
                        {
                            string snmpString = Top.Cfg.PositionId + "_" + "LC" + "_" + lc.Literal + "_" + lc.RxState.ToString();
                            General.SafeLaunchEvent(SetSnmpString, this, new SnmpStringMsg <string, string>(Settings.Default.IncommingTfCallOid, snmpString));
                        });
                    }
                    break;

                default:
                    break;
                }
            }

            if (!_ChangingCfg)
            {
                RangeMsg <LcState> state = new RangeMsg <LcState>(lc.Pos, new LcState(lc.RxState, lc.TxState));
                General.SafeLaunchEvent(PositionsChanged, this, state);
            }
        }