コード例 #1
0
 public ITemporalStream this[string token]
 {
     get
     {
         ITemporalStream result = null;
         m_streams.TryGetValue(token, out result);
         return(result);
     }
 }
コード例 #2
0
        public ITemporalStream AddTemporalQueue <T>(string token, string description = null)
        {
            ITemporalStream stream = m_streams.GetOrAdd(token,
                                                        _token =>
            {
                stream              = new TemporalQueue <T>(description);
                stream.NoObservers += () =>
                {
                    ITemporalStream forNull;
                    m_streams.TryRemove(token, out forNull);
                };
                return(stream);
            });

            return(stream);
        }
コード例 #3
0
        public IDisposable AddTemporalObserver <T>(ITemporalObserver <T> observer, string token, string description = null,
                                                   int priority = TemporalContextManager.NewTokenPriority)
        {
            ITemporalStream stream = m_streams.GetOrAdd(token,
                                                        _token =>
            {
                stream              = new TemporalStream <T>(description);
                stream.NoObservers += () =>
                {
                    ITemporalStream forNull;
                    m_streams.TryRemove(token, out forNull);
                };
                return(stream);
            });
            TemporalContext <T> ctx = new TemporalContext <T>((ITemporalValueSource <T>)stream, observer, priority);

            return(stream.Subscribe(new TemporalContextHelper <T>(ctx, this)));
        }
コード例 #4
0
        public IDisposable[] AddTemporalObservers <T1, T2>(ITemporalObserver <T1> observer1, ITemporalObserver <T2> observer2, string[] tokens,
                                                           string description = null, int priority = TemporalContextManager.NewTokenPriority)
        {
            int             idx    = 0;
            ITemporalStream stream = m_streams.GetOrAdd(tokens[idx],
                                                        token =>
            {
                stream              = new TemporalStream <T1>(description);
                stream.NoObservers += () =>
                {
                    ITemporalStream forNull;
                    m_streams.TryRemove(token, out forNull);
                };
                return(stream);
            });

            TemporalLinker link1 = TemporalLinker.Create((TemporalStream <T1>)stream, observer1);

            idx++;
            stream = m_streams.GetOrAdd(tokens[idx],
                                        token =>
            {
                stream              = new TemporalStream <T1>(description);
                stream.NoObservers += () =>
                {
                    ITemporalStream forNull;
                    m_streams.TryRemove(token, out forNull);
                };
                return(stream);
            });

            TemporalLinker link2 = TemporalLinker.Create((TemporalStream <T2>)stream, observer2);

            TemporalLinkedContext ctx = new TemporalLinkedContext(new[] { link1, link2 }, priority);

            return(new IDisposable[] {
                ((ITemporalStream)link1.m_stream).Subscribe(new TemporalLinkedContextHelper <T1>(ctx, this, 0)),
                ((ITemporalStream)link2.m_stream).Subscribe(new TemporalLinkedContextHelper <T2>(ctx, this, 1))
            });
        }
コード例 #5
0
        public void SendTemporalValue <T>(string token, TemporalValue <T> value)
        {
            ITemporalStream queue = AddTemporalQueue <T>(token);

            ((ICollection <TemporalValue <T> >)queue).Add(value);
        }
コード例 #6
0
        public void AddTemporalValue <T>(string token, TemporalValue <T> value)
        {
            ITemporalStream stream = AddTemporalStream <T>(token);

            ((ICollection <TemporalValue <T> >)stream).Add(value);
        }