internal Subscription AddSubscription(string channel, int streamId) { VerifyActive(); long correlationId = _driverProxy.AddSubscription(channel, streamId); Subscription subscription = new Subscription(this, channel, streamId, correlationId, _ctx.AvailableImageHandler(), _ctx.unavailableImageHandler()); _activeSubscriptions.Add(subscription); AwaitResponse(correlationId, channel); return(subscription); }
internal Subscription AddSubscription(string channel, int streamId) { lock (this) { VerifyDriverIsActive(); var correlationId = _driverProxy.AddSubscription(channel, streamId); var subscription = new Subscription(this, channel, streamId, correlationId); _activeSubscriptions.Add(subscription); AwaitResponse(correlationId, channel, true); return(subscription); } }
internal Subscription AddSubscription(string channel, int streamId, AvailableImageHandler availableImageHandler, UnavailableImageHandler unavailableImageHandler) { if (_isClosed) { throw new InvalidOperationException("Aeron client is closed"); } long correlationId = _driverProxy.AddSubscription(channel, streamId); Subscription subscription = new Subscription(this, channel, streamId, correlationId, availableImageHandler, unavailableImageHandler); _activeSubscriptions.Add(subscription); AwaitResponse(correlationId, channel); return(subscription); }
internal Subscription AddSubscription(string channel, int streamId) { lock (this) { VerifyDriverIsActive(); var correlationId = _driverProxy.AddSubscription(channel, streamId); var timeout = _nanoClock.NanoTime() + _driverTimeoutNs; var subscription = new Subscription(this, channel, streamId, correlationId); _activeSubscriptions.Add(subscription); DoWorkUntil(correlationId, timeout, channel); return(subscription); } }
internal virtual Subscription AddSubscription(string channel, int streamId, AvailableImageHandler availableImageHandler, UnavailableImageHandler unavailableImageHandler) { _clientLock.Lock(); try { EnsureOpen(); long correlationId = _driverProxy.AddSubscription(channel, streamId); Subscription subscription = new Subscription(this, channel, streamId, correlationId, availableImageHandler, unavailableImageHandler); _resourceByRegIdMap[correlationId] = subscription; AwaitResponse(correlationId); return(subscription); } finally { _clientLock.Unlock(); } }