Пример #1
0
        internal Publication AddPublication(string channel, int streamId)
        {
            VerifyActive();

            Publication publication = _activePublications.Get(channel, streamId);

            if (null == publication)
            {
                AwaitResponse(_driverProxy.AddPublication(channel, streamId), channel);
                publication = _activePublications.Get(channel, streamId);
            }

            publication.IncRef();

            return(publication);
        }
Пример #2
0
        internal ConcurrentPublication AddPublication(string channel, int streamId)
        {
            _clientLock.Lock();
            try
            {
                EnsureOpen();

                _stashedChannel = channel;
                long registrationId = _driverProxy.AddPublication(channel, streamId);
                AwaitResponse(registrationId);

                return((ConcurrentPublication)_resourceByRegIdMap[registrationId]); // TODO dictionary semantics if non-existant
            }
            finally
            {
                _clientLock.Unlock();
            }
        }
Пример #3
0
        internal Publication AddPublication(string channel, int streamId)
        {
            if (_isClosed)
            {
                throw new InvalidOperationException("Aeron client is closed");
            }

            Publication publication = _activePublications.Get(channel, streamId);

            if (null == publication)
            {
                AwaitResponse(_driverProxy.AddPublication(channel, streamId), channel);
                publication = _activePublications.Get(channel, streamId);
            }

            publication.IncRef();

            return(publication);
        }
Пример #4
0
        internal Publication AddPublication(string channel, int streamId)
        {
            lock (this)
            {
                VerifyDriverIsActive();

                var publication = _activePublications.Get(channel, streamId);
                if (publication == null)
                {
                    var correlationId = _driverProxy.AddPublication(channel, streamId);

                    AwaitResponse(correlationId, channel, true);

                    publication = _activePublications.Get(channel, streamId);
                }

                publication.IncRef();

                return(publication);
            }
        }
Пример #5
0
        internal Publication AddPublication(string channel, int streamId)
        {
            lock (this)
            {
                VerifyDriverIsActive();

                var publication = _activePublications.Get(channel, streamId);
                if (publication == null)
                {
                    var correlationId = _driverProxy.AddPublication(channel, streamId);
                    var timeout       = _nanoClock.NanoTime() + _driverTimeoutNs;

                    DoWorkUntil(correlationId, timeout, channel);

                    publication = _activePublications.Get(channel, streamId);
                }

                publication.IncRef();

                return(publication);
            }
        }