/// <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); }
/// <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)); }
/// <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); }
/// <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); } } } }