Esempio n. 1
0
            internal static Dictionary <string, List <Subscriber> > GetAll(string name, IModel relativeTo, ScopingRules scope)
            {
                IModel[] allModels = scope.FindAll(relativeTo);
                Dictionary <string, List <Subscriber> > subscribers = new Dictionary <string, List <Subscriber> >();

                foreach (IModel modelNode in allModels)
                {
                    foreach (MethodInfo method in modelNode.GetType().GetMethods(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy))
                    {
                        EventSubscribeAttribute attribute = (EventSubscribeAttribute)ReflectionUtilities.GetAttribute(method, typeof(EventSubscribeAttribute), false);
                        if (attribute != null)
                        {
                            string eventName = attribute.ToString();

                            if (!eventName.Equals(name, StringComparison.InvariantCultureIgnoreCase))
                            {
                                continue;
                            }

                            Subscriber subscriber = new Subscriber(eventName, modelNode, method);

                            if (subscribers[eventName] == null)
                            {
                                subscribers[eventName] = new List <Subscriber>();
                            }
                            subscribers[eventName].Add(subscriber);
                        }
                    }
                }

                return(subscribers);
            }
Esempio n. 2
0
            internal static Dictionary <string, List <Subscriber> > GetAll(List <IModel> allModels)
            {
                Dictionary <string, List <Subscriber> > subscribers = new Dictionary <string, List <Subscriber> >();

                foreach (IModel modelNode in allModels)
                {
                    foreach (MethodInfo method in modelNode.GetType().GetMethods(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy))
                    {
                        EventSubscribeAttribute attribute = (EventSubscribeAttribute)ReflectionUtilities.GetAttribute(method, typeof(EventSubscribeAttribute), false);
                        if (attribute != null)
                        {
                            string     eventName  = attribute.ToString();
                            Subscriber subscriber = new Subscriber(eventName, modelNode, method);

                            if (!subscribers.ContainsKey(eventName))
                            {
                                subscribers.Add(eventName, new List <Subscriber>());
                            }
                            subscribers[eventName].Add(subscriber);
                        }
                    }
                }

                return(subscribers);
            }
Esempio n. 3
0
            /// <summary>Find all event subscribers in the specified models.</summary>
            /// <param name="name">The name of the event to look for</param>
            /// <param name="relativeTo">The model to use in scoping lookup</param>
            /// <param name="scope">Scoping rules</param>
            /// <returns>The list of event subscribers</returns>
            internal static List <Subscriber> FindAll(string name, IModel relativeTo, ScopingRules scope)
            {
                List <Subscriber> subscribers = new List <Subscriber>();

                foreach (IModel modelNode in scope.FindAll(relativeTo))
                {
                    foreach (MethodInfo method in modelNode.GetType().GetMethods(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy))
                    {
                        EventSubscribeAttribute subscriberAttribute = (EventSubscribeAttribute)ReflectionUtilities.GetAttribute(method, typeof(EventSubscribeAttribute), false);
                        if (subscriberAttribute != null && subscriberAttribute.ToString() == name)
                        {
                            subscribers.Add(new Subscriber(subscriberAttribute.ToString(), modelNode, method));
                        }
                    }
                }

                return(subscribers);
            }
Esempio n. 4
0
            /// <summary>Find all event subscribers in the specified models.</summary>
            /// <param name="allModels">A list of all models in simulation.</param>
            /// <returns>The list of event subscribers</returns>
            internal static List <Subscriber> FindAll(List <IModel> allModels)
            {
                List <Subscriber> subscribers = new List <Subscriber>();

                foreach (IModel modelNode in allModels)
                {
                    foreach (MethodInfo method in modelNode.GetType().GetMethods(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy))
                    {
                        EventSubscribeAttribute subscriberAttribute = (EventSubscribeAttribute)ReflectionUtilities.GetAttribute(method, typeof(EventSubscribeAttribute), false);
                        if (subscriberAttribute != null)
                        {
                            subscribers.Add(new Subscriber(subscriberAttribute.ToString(), modelNode, method));
                        }
                    }
                }

                return(subscribers);
            }
Esempio n. 5
0
        /// <summary>
        /// Look through the specified model and return all event subscribers that match the event name. If
        /// eventName is null then all will be returned.
        /// </summary>
        /// <param name="eventName">The name of the event to look for</param>
        /// <param name="relativeTo">The model to search for event subscribers</param>
        /// <returns>The list of event subscribers found.</returns>
        private static List <EventSubscriber> FindEventSubscribers(string eventName, IModel relativeTo)
        {
            List <EventSubscriber> subscribers = new List <EventSubscriber>();

            foreach (MethodInfo method in relativeTo.GetType().GetMethods(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy))
            {
                EventSubscribeAttribute subscriberAttribute = (EventSubscribeAttribute)ReflectionUtilities.GetAttribute(method, typeof(EventSubscribeAttribute), false);
                if (subscriberAttribute != null && (eventName == null || subscriberAttribute.ToString() == eventName))
                {
                    subscribers.Add(new EventSubscriber()
                    {
                        Name       = subscriberAttribute.ToString(),
                        MethodInfo = method,
                        Model      = relativeTo as Model
                    });
                }
            }
            return(subscribers);
        }