Example #1
0
        private void AriClient_OnChannelHangupRequestEvent(IAriClient sender, ChannelHangupRequestEvent e)
        {
            string callerId = e.Channel.Caller.Number;

            numbers.Remove(callerId);

            if (!String.IsNullOrEmpty(e.Channel.Id))
            {
                dtmfs.Remove(e.Channel.Id);
            }
            else
            {
                var keys = dtmfs.Keys;
                foreach (var item in keys)
                {
                    DtmfItem dtmfItem;
                    dtmfs.TryGetValue(item, out dtmfItem);
                    if (dtmfItem != null)
                    {
                        if (dtmfItem.channel.Caller.Number == callerId)
                        {
                            dtmfs.Remove(item);
                        }
                    }
                }
            }
        }
Example #2
0
        private void Pbx_OnChannelHangupRequestEvent(IAriClient sender, ChannelHangupRequestEvent e)
        {
            ProtocolMessages.Message msg = null;
            try
            {
                lock (_locker)
                {
                    msg = callHandlerCache.GetByChannelId(e.Channel.Id).ChannelHangupEvent(e.Channel.Id, e.Cause, "");
                }
            }
            catch (Exception ex)
            {
                Log.Logger.Debug("Channel HangUpReques: ERROR " + ex.Message + "\n" + ex.StackTrace);
            }

            if (msg != null)
            {
                actorPbxProxy.Send(msg);
            }
            else
            {
                Log.Logger.Debug("Channel HangUpReques: " + e.Channel.Id + " el callhandler devolvió msg = null");
            }
            //TODO:Revisar este lock, verificar si lo que está adentro lo estoy ejecutando
            lock (_locker)
            {
                //si la llamada finalizó remuevo todo
                CallHandler callHandler = callHandlerCache.GetByChannelId(e.Channel.Id);
                if (callHandler != null && callHandler.IsCallTerminated())
                {
                    Log.Logger.Debug("Channel HangUpRequest: " + e.Channel.Id + ", call TERMINATED remuevo todo el callhandler: " + callHandler);
                    callHandlerCache.RemoveCallHandler(callHandler.Id);

                    Log.Logger.Debug("Channel HangUpRequest: el bridge: " + callHandler.Bridge.Id + " lo marco como free");
                    bridgesList.SetFreeBridge(callHandler.Bridge.Id);
                }
                else // hago lo mismo que el channel destroy
                {
                    callHandlerCache.RemoveChannel(e.Channel.Id);
                    Log.Logger.Debug("Channel HangUpRequest: " + e.Channel.Id + " remuevo channel del callhandler");
                }
            }
        }