Exemplo n.º 1
0
 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);
 }
Exemplo n.º 2
0
 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);
 }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
 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];
     }
 }
Exemplo n.º 5
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);
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        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);
        }