private List <string> m_workerSIPEndPoints = new List <string>(); // Allow quick lookups to determine whether a remote end point is that of a worker process. public SIPAppServerManager( SIPMonitorLogDelegate logDelegate, SIPTransport sipTransport, XmlNode appServerWorkersNode, string appServerEndPointsPath) { if (appServerWorkersNode == null || appServerWorkersNode.ChildNodes.Count == 0) { throw new ArgumentNullException("A SIPAppServerManager cannot be created with an empty workers node."); } SIPMonitorLogEvent_External = logDelegate; m_sipTransport = sipTransport; m_appServerWorkersNode = appServerWorkersNode; m_appServerEndPointsPath = appServerEndPointsPath; if (!appServerEndPointsPath.IsNullOrBlank() && File.Exists(appServerEndPointsPath)) { m_sipCallDispatcherFile = new SIPCallDispatcherFile(logDelegate, appServerEndPointsPath); } try { CallManagerPassThruServiceInstanceProvider callManagerPassThruSvcInstanceProvider = new CallManagerPassThruServiceInstanceProvider(this); m_callManagerPassThruSvcHost = new ServiceHost(typeof(CallManagerPassThruService)); m_callManagerPassThruSvcHost.Description.Behaviors.Add(callManagerPassThruSvcInstanceProvider); m_callManagerPassThruSvcHost.Open(); logger.Debug("SIPAppServerManager CallManagerPassThru hosted service successfully started on " + m_callManagerPassThruSvcHost.BaseAddresses[0].AbsoluteUri + "."); } catch (Exception excp) { logger.Warn("Exception starting SIPAppServerManager CallManagerPassThru hosted service. " + excp.Message); } foreach (XmlNode appServerWorkerNode in m_appServerWorkersNode.ChildNodes) { SIPAppServerWorker appServerWorker = new SIPAppServerWorker(appServerWorkerNode); if (m_sipCallDispatcherFile != null) { appServerWorker.Healthy += WorkerIsHealthy; appServerWorker.Unhealthy += WorkerIsUnhealthy; } m_appServerWorkers.Add(appServerWorker); m_workerSIPEndPoints.Add(appServerWorker.AppServerEndpoint.ToString()); logger.Debug("SIPAppServerManager worker added for " + appServerWorker.AppServerEndpoint.ToString() + " and " + appServerWorker.CallManagerAddress.ToString() + "."); } ThreadPool.QueueUserWorkItem(delegate { SpawnWorkers(); }); ThreadPool.QueueUserWorkItem(delegate { ProbeWorkers(); }); }
private List <string> m_workerSIPEndPoints = new List <string>(); // Allow quick lookups to determine whether a remote end point is that of a worker process. public SIPCallDispatcher( SIPMonitorLogDelegate logDelegate, SIPTransport sipTransport, XmlNode callDispatcherNode, SIPEndPoint outboundProxy, string dispatcherScriptPath) { if (callDispatcherNode == null || callDispatcherNode.ChildNodes.Count == 0) { throw new ArgumentNullException("A SIPCallDispatcher cannot be created with an empty configuration node."); } SIPMonitorLogEvent_External = logDelegate; m_sipTransport = sipTransport; m_callDispatcherNode = callDispatcherNode; m_outboundProxy = outboundProxy; m_dispatcherScriptPath = dispatcherScriptPath; m_scriptLoader = new ScriptLoader(SIPMonitorLogEvent_External, m_dispatcherScriptPath); m_scriptLoader.ScriptFileChanged += (s, e) => { m_compiledScript = m_scriptLoader.GetCompiledScript(); }; m_compiledScript = m_scriptLoader.GetCompiledScript(); try { CallManagerPassThruServiceInstanceProvider callManagerPassThruSvcInstanceProvider = new CallManagerPassThruServiceInstanceProvider(this); m_callManagerPassThruSvcHost = new ServiceHost(typeof(CallManagerPassThruService)); m_callManagerPassThruSvcHost.Description.Behaviors.Add(callManagerPassThruSvcInstanceProvider); m_callManagerPassThruSvcHost.Open(); logger.Debug("SIPCallDispatcher CallManagerPassThru hosted service successfully started on " + m_callManagerPassThruSvcHost.BaseAddresses[0].AbsoluteUri + "."); } catch (Exception excp) { logger.Warn("Exception starting SIPCallDispatcher CallManagerPassThru hosted service. " + excp.Message); } foreach (XmlNode callDispatcherWorkerNode in callDispatcherNode.ChildNodes) { SIPCallDispatcherWorker callDispatcherWorker = new SIPCallDispatcherWorker(callDispatcherWorkerNode); m_callDispatcherWorkers.Add(callDispatcherWorker); m_workerSIPEndPoints.Add(callDispatcherWorker.AppServerEndpoint.ToString()); dispatcherLogger.Debug(" SIPCallDispatcher worker added for " + callDispatcherWorker.AppServerEndpoint.ToString() + " and " + callDispatcherWorker.CallManagerAddress.ToString() + "."); } ThreadPool.QueueUserWorkItem(delegate { SpawnWorkers(); }); ThreadPool.QueueUserWorkItem(delegate { ProbeWorkers(); }); }
public SIPAppServerManager( SIPMonitorLogDelegate logDelegate, SIPTransport sipTransport, XmlNode appServerWorkersNode, string appServerEndPointsPath) { if (appServerWorkersNode == null || appServerWorkersNode.ChildNodes.Count == 0) { throw new ArgumentNullException("A SIPAppServerManager cannot be created with an empty workers node."); } SIPMonitorLogEvent_External = logDelegate; m_sipTransport = sipTransport; m_appServerWorkersNode = appServerWorkersNode; m_appServerEndPointsPath = appServerEndPointsPath; if (!appServerEndPointsPath.IsNullOrBlank() && File.Exists(appServerEndPointsPath)) { m_sipCallDispatcherFile = new SIPCallDispatcherFile(logDelegate, appServerEndPointsPath); } try { CallManagerPassThruServiceInstanceProvider callManagerPassThruSvcInstanceProvider = new CallManagerPassThruServiceInstanceProvider(this); m_callManagerPassThruSvcHost = new ServiceHost(typeof(CallManagerPassThruService)); m_callManagerPassThruSvcHost.Description.Behaviors.Add(callManagerPassThruSvcInstanceProvider); m_callManagerPassThruSvcHost.Open(); logger.Debug("SIPAppServerManager CallManagerPassThru hosted service successfully started on " + m_callManagerPassThruSvcHost.BaseAddresses[0].AbsoluteUri + "."); } catch (Exception excp) { logger.Warn("Exception starting SIPAppServerManager CallManagerPassThru hosted service. " + excp.Message); } foreach (XmlNode appServerWorkerNode in m_appServerWorkersNode.ChildNodes) { XmlNode workerNode = appServerWorkerNode; ThreadPool.QueueUserWorkItem(delegate { ManageWorker(workerNode); }); Thread.Sleep(1000); // Won't be able to start until all subsequnet workers are started anyway due to the need for the recycle lock. } }
private List<string> m_workerSIPEndPoints = new List<string>(); // Allow quick lookups to determine whether a remote end point is that of a worker process. public SIPCallDispatcher( SIPMonitorLogDelegate logDelegate, SIPTransport sipTransport, XmlNode callDispatcherNode, SIPEndPoint outboundProxy, string dispatcherScriptPath) { if (callDispatcherNode == null || callDispatcherNode.ChildNodes.Count == 0) { throw new ArgumentNullException("A SIPCallDispatcher cannot be created with an empty configuration node."); } SIPMonitorLogEvent_External = logDelegate; m_sipTransport = sipTransport; m_callDispatcherNode = callDispatcherNode; m_outboundProxy = outboundProxy; m_dispatcherScriptPath = dispatcherScriptPath; m_scriptLoader = new ScriptLoader(SIPMonitorLogEvent_External, m_dispatcherScriptPath); m_scriptLoader.ScriptFileChanged += (s, e) => { m_compiledScript = m_scriptLoader.GetCompiledScript(); }; m_compiledScript = m_scriptLoader.GetCompiledScript(); try { CallManagerPassThruServiceInstanceProvider callManagerPassThruSvcInstanceProvider = new CallManagerPassThruServiceInstanceProvider(this); m_callManagerPassThruSvcHost = new ServiceHost(typeof(CallManagerPassThruService)); m_callManagerPassThruSvcHost.Description.Behaviors.Add(callManagerPassThruSvcInstanceProvider); m_callManagerPassThruSvcHost.Open(); logger.Debug("SIPCallDispatcher CallManagerPassThru hosted service successfully started on " + m_callManagerPassThruSvcHost.BaseAddresses[0].AbsoluteUri + "."); } catch (Exception excp) { logger.Warn("Exception starting SIPCallDispatcher CallManagerPassThru hosted service. " + excp.Message); } foreach (XmlNode callDispatcherWorkerNode in callDispatcherNode.ChildNodes) { SIPCallDispatcherWorker callDispatcherWorker = new SIPCallDispatcherWorker(callDispatcherWorkerNode); m_callDispatcherWorkers.Add(callDispatcherWorker); m_workerSIPEndPoints.Add(callDispatcherWorker.AppServerEndpoint.ToString()); dispatcherLogger.Debug(" SIPCallDispatcher worker added for " + callDispatcherWorker.AppServerEndpoint.ToString() + " and " + callDispatcherWorker.CallManagerAddress.ToString() + "."); } ThreadPool.QueueUserWorkItem(delegate { SpawnWorkers(); }); ThreadPool.QueueUserWorkItem(delegate { ProbeWorkers(); }); }