Ejemplo n.º 1
0
 /// <summary>
 /// Register a listener for a global broadcast.
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="listener"></param>
 public static void UnregisterGlobal <T>(T listener) where T : class
 {
     if (object.ReferenceEquals(listener, null))
     {
         throw new System.ArgumentNullException("listener");
     }
     GlobalMessagePool <T> .Remove(listener);
 }
Ejemplo n.º 2
0
 /// <summary>
 /// Register a listener for a global Broadcast.
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="listener"></param>
 public static void RegisterGlobal <T>(T listener) where T : class
 {
     if (listener == null)
     {
         throw new System.ArgumentNullException("listener");
     }
     GlobalMessagePool <T> .Add(listener);
 }
 public static bool ContainsGlobalListener <T>(T listener) where T : class
 {
     if (object.ReferenceEquals(listener, null))
     {
         throw new System.ArgumentNullException("listener");
     }
     return(GlobalMessagePool <T> .Contains(listener));
 }
Ejemplo n.º 4
0
        /// <summary>
        /// Broadcast a message globally to all registered for T. This is faster than FindAndBroadcast, but requires manuall registering/unregistering.
        /// </summary>
        /// <typeparam name="TInterface"></typeparam>
        /// <typeparam name="TArg"></typeparam>
        /// <param name="arg"></param>
        /// <param name="functor"></param>
        /// <param name="includeDisabledComponents"></param>
        public static void Broadcast <TInterface, TArg>(TArg arg, System.Action <TInterface, TArg> functor) where TInterface : class
        {
            if (functor == null)
            {
                throw new System.ArgumentNullException("functor");
            }

            GlobalMessagePool <TInterface> .Execute <TArg>(arg, functor);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Broadcast a message globally to all registered for T. This is faster than FindAndBroadcast, but requires manuall registering/unregistering.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="functor"></param>
        /// <param name="includeDisabledComponents"></param>
        public static void Broadcast <T>(System.Action <T> functor) where T : class
        {
            if (functor == null)
            {
                throw new System.ArgumentNullException("functor");
            }

            GlobalMessagePool <T> .Execute(functor);
        }
        /// <summary>
        /// Create a MessageToken to invoke at a later point. If no targets found null is returned.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        public static MessageToken <T> CreateBroadcastToken <T>() where T : class
        {
            if (GlobalMessagePool <T> .Count == 0)
            {
                return(null);
            }

            return(new MessageToken <T>(GlobalMessagePool <T> .CopyReceivers()));
        }
        /// <summary>
        /// Broadcast a message globally to all that match T. This can be slow, use sparingly.
        /// </summary>
        /// <typeparam name="TInterface"></typeparam>
        /// <typeparam name="TArg"></typeparam>
        /// <param name="arg"></param>
        /// <param name="functor"></param>
        public static void FindAndBroadcast <TInterface, TArg>(TArg arg, System.Action <TInterface, TArg> functor, bool includeDisabledComponents = false) where TInterface : class
        {
            if (functor == null)
            {
                throw new System.ArgumentNullException("functor");
            }

            using (var coll = TempCollection.GetSet <TInterface>())
            {
                ObjUtil.FindObjectsOfInterface <TInterface>(coll);
                GlobalMessagePool <TInterface> .CopyReceivers(coll);

                var e = coll.GetEnumerator();
                while (e.MoveNext())
                {
                    if (includeDisabledComponents || TargetIsValid(e.Current))
                    {
                        functor(e.Current, arg);
                    }
                }
            }
        }