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)) }); }
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)); }