public void RunScript(DishBuilder dish, TimeSpan time, bool broadcastClock) { if (!dish.isOk()) { throw (new SystemException("Script is not valid")); } m_runScript = true; m_suspendClock.Reset(); m_process = new Thread(() => DishProcess(dish)); m_process.Start(); m_clockThread = new Thread(() => BroadcastClock(time)); m_clockThread.Start(); }
public void RunScript(DishBuilder dish, bool broadcastClock) { if (m_runScript == true) { throw (new SystemException("Already running")); } if (!dish.isOk()) { throw (new SystemException("Script is not valid")); } m_suspendClock.Reset(); m_runScript = true; m_process = new Thread(() => DishProcess(dish)); m_process.Start(); m_clockThread = new Thread(() => UpdateClock(dish.getTotalTime())); m_clockThread.Start(); }
void DishProcess(DishBuilder dishList) { pCallback("ScriptStarted", ""); int jumploop = -1; int loopStartAddress = -1; int pc = 0; while (m_runScript) { try { Tuple <MOTOR_CMD, float> n = dishList.getCommand(pc); switch (n.Item1) { case MOTOR_CMD.MOVMENT: if ((int)n.Item2 > m_motorLength) { m_runScript = false; m_suspendClock.Set(); string s = (int)n.Item2 + " " + m_motorLength; pCallback("Position error", s); return; } else if ((int)n.Item2 > MaxLength) { m_runScript = false; m_suspendClock.Set(); string s = (int)n.Item2 + " " + MaxLength; pCallback("Position error", s); return; } else if ((int)n.Item2 < MinLength) { m_runScript = false; m_suspendClock.Set(); string s = (int)n.Item2 + " " + MinLength; pCallback("Position error", s); return; } SetNewPosition((int)n.Item2); m_event.Reset(); m_event.WaitOne(); break; case MOTOR_CMD.SPEED: m_speedLevel = (int)n.Item2; break; case MOTOR_CMD.WAIT: m_suspendClock.Set(); m_timerCounter.WaitOne((int)n.Item2 * 1000); m_suspendClock.Reset(); break; case MOTOR_CMD.LOOP_START: jumploop = (int)n.Item2; loopStartAddress = pc + 1; break; case MOTOR_CMD.LOOP_END: jumploop--; if (jumploop > 0) { pc = loopStartAddress; continue; } break; } pc++; } catch (Exception err) { if (err.Message == "Finished") { m_runScript = false; m_runmotor = false; m_suspendClock.Set(); pCallback("Finished", ""); return; } } } }