public AgentRecord[] CreateDefaultAgentOrder() { AgentRecord[] array = new AgentRecord[this.agentsInDefaultOrder.Length]; for (int i = 0; i < this.agentsInDefaultOrder.Length; i++) { array[i] = new AgentRecord(this.agentsInDefaultOrder[i].Id, this.agentsInDefaultOrder[i].Name, this.agentsInDefaultOrder[i].Type, this.agentsInDefaultOrder[i].SequenceNumber, this.agentsInDefaultOrder[i].IsInternal); } return(array); }
private bool IsAgentEnabled(AgentRecord agentRecord) { if (string.Equals(agentRecord.Type, MExSession.DeliveryAgentType, StringComparison.OrdinalIgnoreCase)) { DeliveryAgentManager deliveryAgentManager = (DeliveryAgentManager)this.settings.AgentFactories.GetAgentManager(agentRecord.Id); if (!string.Equals(deliveryAgentManager.SupportedDeliveryProtocol, this.name, StringComparison.OrdinalIgnoreCase)) { return(false); } } return(true); }
public int GetAgentIndex(AgentRecord agentEntry) { int num = 0; AgentRecord next = this.executionChain; while (next != null && next != agentEntry) { num++; next = next.Next; } ExTraceGlobals.DispatchTracer.Information <string, int, string>((long)this.GetHashCode(), this.InstanceNameFormatted + "agent '{0}' has index {1} ({2})", (agentEntry == null) ? "null" : agentEntry.Name, num, (agentEntry == null || next == null) ? "not found" : "found"); return(num); }
private static void InitializeAgentsAndSubscriptions(MExConfiguration config, string agentGroup, bool publicAgentsOnly, out string[] agents, out string[][] subscriptions, out AgentRecord[] agentsInDefaultOrder) { AgentInfo[] array = publicAgentsOnly ? config.GetEnaledPublicAgentsByType(agentGroup) : config.GetEnabledAgentsByType(agentGroup); agents = new string[array.Length]; agentsInDefaultOrder = new AgentRecord[array.Length]; subscriptions = new string[array.Length][]; for (int i = 0; i < array.Length; i++) { AgentInfo agentInfo = array[i]; agentsInDefaultOrder[i] = new AgentRecord(agentInfo.Id, agentInfo.AgentName, agentInfo.BaseTypeName, i, agentInfo.IsInternal); agents[i] = agentInfo.AgentName; subscriptions[i] = new string[0]; } }
private MExSession(IRuntimeSettings settings, ICloneableInternal state, string name, string parentName, AgentRecord[] agentsInDefaultOrder, AgentRecord[] publicAgentsInDefaultOrder, Action startAsyncAgentCallback, Action completeAsyncAgentCallback, Func <bool> resumeAgentCallback) { settings.AddSessionRef(); this.settings = settings; this.hostState = state; this.name = name; this.parentName = parentName; this.id = this.GetHashCode().ToString(CultureInfo.InvariantCulture); string str = string.IsNullOrEmpty(parentName) ? null : (parentName + "."); string arg = str + this.id; this.InstanceNameFormatted = string.Format("[{0}][{1}] ", "MExSession", arg); this.isCompleted = true; if (agentsInDefaultOrder == null) { agentsInDefaultOrder = this.settings.CreateDefaultAgentOrder(); publicAgentsInDefaultOrder = new AgentRecord[this.settings.PublicAgentsInDefaultOrder.Length]; int num = 0; for (int i = 0; i < agentsInDefaultOrder.Length; i++) { agentsInDefaultOrder[i].Instance = this.CreateAgentInstance(agentsInDefaultOrder[i]); agentsInDefaultOrder[i].Enabled = this.IsAgentEnabled(agentsInDefaultOrder[i]); if (!agentsInDefaultOrder[i].IsInternal) { publicAgentsInDefaultOrder[num] = agentsInDefaultOrder[i]; num++; } } } if (ExTraceGlobals.DispatchTracer.IsTraceEnabled(TraceType.DebugTrace)) { foreach (AgentRecord agentRecord in agentsInDefaultOrder) { if (agentRecord.Enabled) { ExTraceGlobals.DispatchTracer.TraceDebug <string, string>((long)this.GetHashCode(), this.InstanceNameFormatted + "{0} ({1})", agentRecord.Instance.GetType().FullName, agentRecord.Instance.Id); } } } this.agentsInDefaultOrder = agentsInDefaultOrder; this.publicAgentsInDefaultOrder = publicAgentsInDefaultOrder; this.startAsyncAgentCallback = startAsyncAgentCallback; this.completeAsyncAgentCallback = completeAsyncAgentCallback; this.resumeAgentCallback = resumeAgentCallback; this.scheduleWorkDelegate = new MExSession.ScheduleWork(ThreadPool.QueueUserWorkItem); this.dispatcher = new Dispatcher(this.settings, this.agentsInDefaultOrder, arg); this.disposeTracker = DisposeTracker.Get <MExSession>(this); ExTraceGlobals.DispatchTracer.TraceDebug <string>((long)this.GetHashCode(), this.InstanceNameFormatted + "created '{0}'", this.Name); }
private static AgentRecord BuildAgentList(AgentRecord[] agentsInDefaultOrder) { AgentRecord agentRecord = null; AgentRecord agentRecord2 = null; for (int i = 0; i < agentsInDefaultOrder.Length; i++) { AgentRecord agentRecord3 = (AgentRecord)agentsInDefaultOrder[i].Clone(); if (agentRecord == null) { agentRecord = agentRecord3; agentRecord2 = agentRecord3; } else { agentRecord2.Next = agentRecord3; agentRecord2 = agentRecord3; } } return(agentRecord); }
private Agent CreateAgentInstance(AgentRecord agentRecord) { AgentFactory agentFactory = this.settings.AgentFactories[agentRecord.Id]; object state = (this.hostState == null) ? null : this.hostState.Clone(); Agent agent; try { agent = agentFactory.CreateAgent(agentRecord.Type, state); } catch (LocalizedException ex) { MExDiagnostics.EventLog.LogEvent(EdgeExtensibilityEventLogConstants.Tuple_MExAgentInstanceCreationFailure, null, new object[] { agentRecord.Name, ex.Message }); throw; } if (agent == null || agent.Id != null) { string error = (agent == null) ? "agent instance cannot be null" : "agent instance already in use"; ApplicationException ex2 = new ApplicationException(MExRuntimeStrings.AgentCreationFailure(agentRecord.Name, error)); MExDiagnostics.EventLog.LogEvent(EdgeExtensibilityEventLogConstants.Tuple_MExAgentInstanceCreationFailure, null, new object[] { agentRecord.Name, ex2.Message }); throw ex2; } agent.Id = agent.GetHashCode().ToString(CultureInfo.InvariantCulture); agent.Name = agentRecord.Name; agent.SnapshotEnabled = this.settings.MonitoringOptions.MessageSnapshotEnabled; agent.HostState = state; ExTraceGlobals.DispatchTracer.Information <string, string>((long)this.GetHashCode(), this.InstanceNameFormatted + "agent '{0}' created from factory '{1}'", agent.GetType().FullName, agentFactory.GetType().FullName); return(agent); }