/// <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; } }
/// <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); } }
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); } }