public void Publish(MvxMessage message, Type messageType) { if (message == null) { throw new ArgumentNullException(nameof(message)); } List <BaseSubscription> toNotify = null; lock (_locker) { /* * MvxPluginLog.Instance.Trace("Found {0} subscriptions of all types", _subscriptions.Count); * foreach (var t in _subscriptions.Keys) * { * MvxPluginLog.Instance.Trace("Found subscriptions for {0}", t.Name); * } */ Dictionary <Guid, BaseSubscription> messageSubscriptions; if (_subscriptions.TryGetValue(messageType, out messageSubscriptions)) { //MvxPluginLog.Instance.Trace("Found {0} messages of type {1}", messageSubscriptions.Values.Count, typeof(TMessage).Name); toNotify = messageSubscriptions.Values.ToList(); } } if (toNotify == null || toNotify.Count == 0) { MvxPluginLog.Instance.Trace("Nothing registered for messages of type {0}", messageType.Name); return; } var allSucceeded = true; foreach (var subscription in toNotify) { allSucceeded &= subscription.Invoke(message); } if (!allSucceeded) { MvxPluginLog.Instance.Trace("One or more listeners failed - purge scheduled"); SchedulePurge(messageType); } }
public void Publish(MvxMessage message, Type messageType, bool isSticky = false) { if (message == null) { throw new ArgumentNullException(nameof(message)); } List <BaseSubscription>?toNotify = null; lock (_locker) { if (_subscriptions.TryGetValue(messageType, out Dictionary <Guid, BaseSubscription> messageSubscriptions)) { toNotify = messageSubscriptions.Values.ToList(); } } if (isSticky) { _messageDictionary[message.GetType()] = message; } if (toNotify == null || toNotify.Count == 0) { MvxPluginLog.Instance?.Log(LogLevel.Trace, "Nothing registered for messages of type {0}", messageType.Name); return; } var allSucceeded = true; foreach (var subscription in toNotify) { allSucceeded &= subscription.Invoke(message); } if (!allSucceeded) { MvxPluginLog.Instance?.Log(LogLevel.Trace, "One or more listeners failed - purge scheduled"); SchedulePurge(messageType); } }
public void Publish(MvxMessage message, bool isSticky = false) { Publish(message, message.GetType(), isSticky); }
public void Publish(MvxMessage message) { Publish(message, message.GetType()); }