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