public void OnSubscribe(ISubscription s) { if (SubscriptionHelper.Validate(ref this.s, s)) { qs = s as IQueueSubscription <T>; subscribeActual(); } }
public void OnSubscribe(ISubscription subscription) { if (SubscriptionHelper.Validate(ref upstream, subscription)) { if (subscription is IQueueSubscription <T> qs) { this.qs = qs; } OnStart(subscription); } }
/// <inheritdoc/> public void OnSubscribe(ISubscription s) { subscriptions++; if (SubscriptionHelper.SetOnce(ref this.s, s)) { var qs = s as IQueueSubscription <T>; this.qs = qs; if (qs != null) { if (requestFusionMode != FuseableHelper.NONE) { int m = qs.RequestFusion(requestFusionMode); establishedFusionMode = m; if (m == FuseableHelper.SYNC) { try { try { T v; while (qs.Poll(out v)) { values.Add(v); } completions++; Volatile.Write(ref valueCount, values.Count); Volatile.Write(ref lastTimestamp, DateTimeOffset.UtcNow.UtcMillis()); } catch (Exception ex) { errors.Add(ex); } } finally { cde.Signal(); } return; } } } long r = Interlocked.Exchange(ref requested, 0L); if (r != 0L) { s.Request(r); } } }
public virtual void OnSubscribe(ISubscription s) { if (SubscriptionHelper.Validate(ref this.s, s)) { qs = s as IQueueSubscription <T>; if (BeforeSubscribe()) { actual.OnSubscribe(this); AfterSubscribe(); } } }
/// <summary> /// Verifies that the target field is null and sets it to the non-null ISubscription provided /// or signal an InvalidOperationException if the target field is not null and not the Cancelled /// instance. In these cases, the new ISubscription is cancelled. /// </summary> /// <param name="current">The target field</param> /// <param name="s">The new ISubscription instance to set</param> /// <returns>True if successful, false if the target field is not empty</returns> public static bool Validate <T>(ref IQueueSubscription <T> current, IQueueSubscription <T> s) { if (s == null) { ReportSubscriptionNull(); return(false); } if (current != null) { s.Cancel(); if (current != CancelledQueueSubscription <T> .Instance) { ReportSubscriptionSet(); } return(false); } current = s; return(true); }
protected void Cleanup() { nullActual(); this.s = SubscriptionHelper.Cancelled; qs = null; }