private void PublishInternal <TMessage>(TMessage message) where TMessage : class, ITinyMessage { if (message == null) { throw new ArgumentNullException("message"); } List <SubscriptionItem> currentlySubscribed; lock (_SubscriptionsPadlock) { currentlySubscribed = (from sub in _Subscriptions where sub.Subscription.ShouldAttemptDelivery(message) select sub).ToList(); } currentlySubscribed.ForEach(sub => { try { sub.Proxy.Deliver(message, sub.Subscription); } catch (Exception exception) { // By default ignore any errors and carry on _SubscriberErrorHandler.Handle(message, exception); } }); }
private void DeliverLocal<TMessage>(TMessage message, Action<TMessage> delivered = null) where TMessage : class, IMeshNetworkMessage { if (message == null) throw new ArgumentNullException("message"); List<SubscriptionItem> currentlySubscribed; lock (_SubscriptionsPadlock) { currentlySubscribed = (from sub in _Subscriptions where sub.Subscription.ShouldAttemptDelivery(message) select sub).ToList(); } currentlySubscribed.ForEach(sub => { try { sub.Proxy.Deliver(message, sub.Subscription); delivered?.Invoke(message); } catch (Exception exception) { // By default ignore any errors and carry on _subscriberErrorHandler.Handle(message, exception); } }); }