示例#1
0
            public void Run(IExecutive exec, object userData)
            {
                Dump("At start, ", exec);
                IDictionary graphContext = (IDictionary)userData;

                object transferInKey  = m_source.Setup(m_getThis.CreateMass(m_getHowMuch, 17.0), 25.0, Input, true);
                object transferOutKey = m_sink.Setup(m_sendThat.CreateMass(m_sendHowMuch, 17.0), 40.0, Output, true);

                Dump("After setup, ", exec);

                m_source.Execute(graphContext, transferInKey);
                MaterialTransfer mtSrc = (MaterialTransfer)m_source.GetTransferTable(graphContext)[Input.Connector];

                foreach (IMaterial imat in mtSrc.Mixture.Constituents)
                {
                    m_mixture.AddMaterial(imat);
                }

                Dump("After source executes, ", exec);

                Mixture          export = (Mixture)m_mixture.RemoveMaterial(m_sendHowMuch);
                MaterialTransfer mtSnk  = new MaterialTransfer(export, TimeSpan.FromMinutes(m_sendHowMuch / 40.0));

                m_sink.GetTransferTable(graphContext).Add(Output.Connector, mtSnk);
                m_sink.Execute(graphContext, transferOutKey);

                Dump("After sink executes, ", exec);

                exec.CurrentEventController.SuspendFor(
                    TimeSpanOperations.Max(
                        TimeSpanOperations.Max(mtSrc.SourceDuration, mtSrc.DestinationDuration),
                        TimeSpanOperations.Max(mtSnk.SourceDuration, mtSnk.DestinationDuration)
                        ));

                m_source.Teardown(transferInKey, true);
                m_sink.Teardown(transferOutKey, true);

                Dump("After teardown, ", exec);
            }
示例#2
0
        private void DoPause(IExecutive exec, object userData)
        {
            DateTime nextPulse = exec.Now + TimeSpanOperations.Max(TimeSpan.Zero, m_periodicity.GetNext());

            exec.RequestDaemonEvent(m_doPulse, nextPulse, 0.0, null);
        }