Ejemplo n.º 1
0
        public bool Unsubscribe <TEvent>(TEvent eventType, MediatorToken token)
        {
            if (token == null)
            {
                return(false);
            }

            var type = typeof(TEvent);

            if (SubscriptionTokens.ContainsKey(eventType) && SubscriptionTokens[eventType].Contains(token))
            {
                var             killedIt = SubscriptionTokens[eventType].SafeRemove(token);
                Action <object> someAction;
                killedIt = killedIt && RegisteredEvents.TryRemove(token, out someAction);
                return(killedIt);
            }
            else if (TypesToTokens.ContainsKey(type) && TypesToTokens[type].Contains(token))
            {
                var             killedIt = TypesToTokens[type].SafeRemove(token);
                Action <object> someAction;
                killedIt = killedIt && RegisteredEvents.TryRemove(token, out someAction);
                return(killedIt);
            }
            return(false);
        }
Ejemplo n.º 2
0
        public MediatorToken Subscribe(ViewModelEvents eventType, Action <object> onTriggered)
        {
            if (onTriggered == null)
            {
                return(null);
            }

            MediatorToken token = null;

            if (!SubscriptionTokens.ContainsKey(eventType))
            {
                token = new MediatorToken();
                RegisteredEvents.TryAdd(token, onTriggered);
                SubscriptionTokens.TryAdd(eventType, new ConcurrentList <MediatorToken>()
                {
                    token
                });
            }
            else
            {
                token = new MediatorToken();
                RegisteredEvents[token] = onTriggered;
                SubscriptionTokens[eventType].Add(token);
            }
            return(token);
        }
Ejemplo n.º 3
0
        public bool Unsubscribe(ViewModelEvents eventType, MediatorToken token)
        {
            if (token == null)
            {
                return(false);
            }

            if (SubscriptionTokens.ContainsKey(eventType) && SubscriptionTokens[eventType].Contains(token))
            {
                var             killedIt = SubscriptionTokens[eventType].Remove(token);
                Action <object> someAction;
                killedIt = killedIt && RegisteredEvents.TryRemove(token, out someAction);
                return(killedIt);
            }
            return(false);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Returns a token for a subscribed event
        /// </summary>
        /// <typeparam name="TEvent"></typeparam>
        /// <param name="onTriggered"></param>
        /// <param name="eventType">If null, registers the action with the Type</param>
        /// <returns></returns>
        public MediatorToken Subscribe <TEvent>(Action <object> onTriggered, TEvent eventType = null) where TEvent : class
        {
            if (onTriggered == null)
            {
                return(null);
            }

            MediatorToken token = null;
            var           type  = typeof(TEvent);

            if (TypesToTokens.ContainsKey(type))
            {
                token = new MediatorToken();
                RegisteredEvents[token] = onTriggered;
                TypesToTokens[type].SafeAdd(token);
            }
            else if (eventType != null && SubscriptionTokens.ContainsKey(eventType))
            {
                token = new MediatorToken();
                RegisteredEvents[token] = onTriggered;
                SubscriptionTokens[eventType].SafeAdd(token);
            }
            else if (eventType != null)
            {
                token = new MediatorToken();
                RegisteredEvents.TryAdd(token, onTriggered);
                SubscriptionTokens.TryAdd(eventType, new ConcurrentList <MediatorToken>()
                {
                    token
                });
            }
            else
            {
                token = new MediatorToken();
                RegisteredEvents.TryAdd(token, onTriggered);
                TypesToTokens.TryAdd(type, new ConcurrentList <MediatorToken>()
                {
                    token
                });
            }
            return(token);
        }