示例#1
0
        /// <summary>
        /// Installs a watcher
        /// </summary>
        /// <param name="node">Yate endpoint to work on</param>
        /// <param name="type">Message type to subscribe to</param>
        /// <returns>Returns Guid if watcher is installed or zero-based Guid if not</returns>
        private static async Task <Guid> _InstallWatcher(INode node, MessageType type)
        {
            if (Handlers.Any(h => h.Value.Type == type && h.Value.Node.Equals(node)))
            {
                logger.Warn("Handler already installed.");

                return(Guid.ParseExact("00000000000000000000000000000000", "N"));
            }

            AbstractMessageSubscriber handler;

            switch (type)
            {
            case MessageType.CallExecute:
                handler = new CallExecuteSubscriber(node);
                break;

            case MessageType.ChanStartup:
                handler = new ChanStartupSubscriber(node);
                break;

            case MessageType.ChanHangup:
                handler = new ChanHangupSubscriber(node);
                break;

            case MessageType.ChanRtp:
                handler = new ChanRtpSubscriber(node);
                break;

            default:
                throw new NotImplementedException();
            }

            return(await _Install(handler));
        }
示例#2
0
        /// <summary>
        /// Installs a handler
        /// </summary>
        /// <param name="node">Yate node id to install handler to</param>
        /// <param name="type">Type of handler</param>
        /// <param name="priority">Priority to install handler</param>
        /// <returns>Returns Guid if handler is installed or zero-based Guid if not</returns>
        private static async Task <Guid> _InstallHandler(INode node, MessageType type, int priority)
        {
            if (Handlers.Any(h => h.Value.Type == type && h.Value.Node.Equals(node)))
            {
                logger.Warn("Handler already installed.");

                return(Guid.ParseExact("00000000000000000000000000000000", "N"));
            }

            AbstractMessageSubscriber handler;

            switch (type)
            {
            case MessageType.EngineTimer:
                handler = new EngineTimerSubscriber(node, priority);
                break;

            case MessageType.CallRoute:
                handler = new CallRouteSubscriber(node, priority);
                break;

            case MessageType.CallCdr:
                handler = new CallCdrSubscriber(node, priority);
                break;

            case MessageType.CallExecute:
                handler = new CallExecuteSubscriber(node, priority);
                break;

            case MessageType.ChanDisconnected:
                handler = new ChanDisconnectedSubscriber(node, priority);
                break;

            case MessageType.ChanDtmf:
                handler = new ChanDtmfSubscriber(node, priority);
                break;

            case MessageType.ChanHangup:
                handler = new ChanHangupSubscriber(node, priority);
                break;

            case MessageType.ChanStartup:
                handler = new ChanStartupSubscriber(node, priority);
                break;

            case MessageType.ChanNotify:
                handler = new ChanNotifySubscriber(node, priority);
                break;

            default:
                throw new NotImplementedException();
            }

            return(await _Install(handler));
        }