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