Example #1
0
 protected override void Dispose(bool explicitDispose)
 {
     if (explicitDispose)
     {
         _runControl?.Dispose();
         _postingCts?.Dispose();
         var postingQueueSpinLock = _postingQueueSpinLock;
         if (postingQueueSpinLock != null)
         {
             postingQueueSpinLock.Invoke(() => _postingQueue.Fluent().NullCond(x => x.ToList()))
             .Fluent().NullCond(postingQueueCopy => postingQueueCopy.DisposeMany());
             postingQueueSpinLock.Invoke(() => _postingQueue.Fluent().NullCond(x => x.Clear()));
         }
         var subscriptionsSpinLock = _subscriptionsSpinLock;
         if (subscriptionsSpinLock != null)
         {
             subscriptionsSpinLock.Invoke(() => _subscriptionsList.Fluent().NullCond(x => x.ToList()))
             .Fluent().NullCond(subscriptionsListCopy => subscriptionsListCopy.Where(i => (i.State & LocalSubscriptionStates.PublisherOwnsSubscription) == LocalSubscriptionStates.PublisherOwnsSubscription).DisposeMany());
             subscriptionsSpinLock.Invoke(() => _subscriptionsList.Fluent().NullCond(x => x.Clear()));
             subscriptionsSpinLock.Invoke(() => _subscriptionsDictionary.Fluent().NullCond(x => x.Clear()));
         }
         _postingWorkers.DisposeAndClearArray();
     }
     _postingQueue            = null;
     _postingQueueSpinLock    = null;
     _postingWorkers          = null;
     _runningSettings         = null;
     _subscriptionsDictionary = null;
     _subscriptionsList       = null;
     _subscriptionsSpinLock   = null;
     _runControl = null;
     _postingCts = null;
     //
     base.Dispose(explicitDispose);
 }
Example #2
0
 public LocalPublisher(ILocalPublisherSettings settings)
 {
     settings.EnsureNotNull(nameof(settings)).EnsureReadOnly().EnsureValid().EnsureNotDisabled();
     //
     _runningSettings         = settings;
     _subscriptionsSpinLock   = new PrimitiveSpinLock();
     _subscriptionsList       = new List <ILocalSubscription>();
     _subscriptionsDictionary = new Dictionary <ILocalSubscription, P_NewSubscriptionRegistrationState>();
     _postingQueue            = new Queue <LocalPostingQueueEntry>();
     _postingQueueSpinLock    = new PrimitiveSpinLock();
     _postingCts     = new CancellationTokenSource();
     _postingWorkers =
         EnumerableUtilities
         .CreateSequence(
             factory: locIndex => new LocalPostingWorker(queue: _postingQueue, queueSpinLock: _postingQueueSpinLock, cancellationToken: _postingCts.Token),
             length: _runningSettings.PostingDop)
         .ToArray();
     _runControl = new RunControl <LocalPublisher>(options: RunControlOptions.SingleStart, component: this, start: P_DoStartAsync, stop: P_DoStopAsync);
 }
Example #3
0
 public LocalPublisherSettings(ILocalPublisherSettings other, bool isReadOnly = false)
     : this(postingDop : other.EnsureNotNull(nameof(other)).Value.PostingDop, isReadOnly : isReadOnly)
 {
 }
Example #4
0
 public GenericLocalPublisher(ILocalPublisherSettings settings)
     : base(settings: settings)
 {
 }
Example #5
0
 public MessageFlowLocalPublisherSettingsOption(ILocalPublisherSettings settings)
 {
     settings.EnsureNotNull(nameof(settings)).EnsureReadOnly().EnsureNotDisabled().EnsureValid();
     //
     _settings = settings;
 }