Esempio n. 1
0
        public IDisposable[] AddTemporalObservers <T1, T2, T3>(ITemporalObserver <T1> observer1, ITemporalObserver <T2> observer2, ITemporalObserver <T3> observer3, string[] tokens, string description = null,
                                                               int priority = TemporalContextManager.NewTokenPriority)
        {
            int             idx = 0;
            ITemporalStream stream;

            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 <T2>(description);
                stream.NoObservers += () =>
                {
                    ITemporalStream forNull;
                    m_streams.TryRemove(token, out forNull);
                };
                return(stream);
            });

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

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

            TemporalLinker link3 = TemporalLinker.Create((TemporalStream <T3>)stream, observer3);

            TemporalLinkedContext ctx = new TemporalLinkedContext(new[] { link1, link2, link3 }, 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)),
                ((ITemporalStream)link3.m_stream).Subscribe(new TemporalLinkedContextHelper <T3>(ctx, this, 2))
            });
        }
Esempio n. 2
0
 public TemporalLinkedContextHelper(TemporalLinkedContext context, TemporalContextManager manager, int index)
 {
     m_index = index; m_context = context; m_manager = manager;
     m_manager.AddTemporalValue("Contexts", new TemporalValue <object>(DateTime.Now.Ticks, m_context));
 }