public void Run(ZoneProgram zoneProgram, ISV isv = null, bool isSyncRequested = false, SyncContext syncContext = null, bool dontStart = false, dynamic startingParameters = null) { if (!Running) { SetupInterruptProcessing(); SetupZoneProgram(zoneProgram, isv, isSyncRequested, syncContext, dontStart, startingParameters); Running = true; } }
private void SetupZoneProgram(ZoneProgram zoneProgram, ISV isv, bool isSyncRequested, SyncContext syncContext, bool dontStart, dynamic startingParameters = null) { SetProgram(zoneProgram); ZoneProgram.LightingController = LightingController; ZoneProgram.SetSyncContext(syncContext); ZoneProgram.SetInterruptQueue(InterruptQueue); if (!dontStart) { ZoneProgram.Start(isv, isSyncRequested, startingParameters: startingParameters); } }
public void Stop(bool force = false) { if (Running) { ZoneProgram?.Dispose(force); UnsetProgram(); UnsetupInterruptProcessing(); DisposeAllInterruptingPrograms(); InterruptingPrograms.Clear(); Running = false; } }
/// <summary> /// Creates a ProgramSet with one program instance /// </summary> public ProgramSet CreateSingularProgramSet(string programSetName, ZoneProgram program, ISV isv, Zone zone, dynamic startingParameters = null) { if (!AvailableZones.Contains(zone)) { throw new Exception("The provided zone is not available."); } var programSet = new ProgramSet(program, zone, isv, programSetName, startingParameters); ProgramSets.Add(programSet); return(programSet); }
/// <summary> /// Removes a given program from the synchronization. /// </summary> public void Unsync(ZoneProgram program) { lock (ZonePrograms) { if (!ZonePrograms.Contains(program)) { return; } } lock (Barrier) { Barrier.RemoveParticipant(); } lock (ZonePrograms) { ZonePrograms.Remove(program); } }
/// <summary> /// Sets this zone's program to the given program. /// </summary> /// <param name="program"></param> private void SetProgram(ZoneProgram program) { ZoneProgram = program; ZoneProgram.Zone = this; }