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