Exemplo n.º 1
0
        public void Subscribe(ISubscriber <T> s)
        {
            var current = Volatile.Read(ref main);

            if (current == null)
            {
                var next = new PublisherReplayMain(bufferSize);

                current = Interlocked.CompareExchange(ref main, next, null);
                if (current == null)
                {
                    current = next;
                }
            }

            current.Subscribe(s);
        }
Exemplo n.º 2
0
        public void Connect(Action <IDisposable> onConnect)
        {
            for (;;)
            {
                var current = Volatile.Read(ref main);

                if (current == null || current.IsTerminated())
                {
                    var next = new PublisherReplayMain(bufferSize);
                    if (Interlocked.CompareExchange(ref main, next, current) != current)
                    {
                        continue;
                    }
                    current = next;
                }

                onConnect(current);

                if (current.TryConnect())
                {
                    source.Subscribe(current);
                }
            }
        }
Exemplo n.º 3
0
 public PublisherReplayInner(ISubscriber <T> actual, PublisherReplayMain parent)
 {
     this.actual = actual;
     this.parent = parent;
 }