private void ProcessMachines(MachineMetadata[] machines)
        {
            foreach (MachineMetadata metadata in machines)
            {
                IMachine machine = metadata.Machine;

                switch (machine.GetState())
                {
                case MachineState.Empty:

                    machine.Pull(metadata.Connected);

                    break;

                case MachineState.Done:

                    if (TryPush(metadata.Connected, machine.GetOutput()))
                    {
                        machine.Reset(true);
                    }

                    break;
                }
            }
        }
Example #2
0
        /// <summary>Process a set of machines.</summary>
        /// <param name="machines">The machines to process.</param>
        private void ProcessMachines(IEnumerable <MachineMetadata> machines)
        {
            machines = machines.ToArray();

            this.VerboseLog($"Automating {machines.Count()} machines...");
            foreach (MachineMetadata metadata in machines)
            {
                IMachine machine = metadata.Machine;
                string   summary = $"Automating {metadata.Location.Name} > {machine.GetType().Name} ({metadata.Connected.Length} pipes)...";

                MachineState state = machine.GetState();
                switch (state)
                {
                case MachineState.Empty:
                    bool pulled = machine.Pull(metadata.Connected);
                    summary += pulled ? " accepted new input." : " no input found.";
                    break;

                case MachineState.Done:
                    bool pushed = metadata.Connected.TryPush(machine.GetOutput());
                    summary += pushed ? " pushed output." : " done, but no pipes can accept its output.";
                    break;

                default:
                    summary += $" machine is {state.ToString().ToLower()}.";
                    break;
                }

                this.VerboseLog($"   {summary}");
            }
        }