예제 #1
0
 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;
     }
 }
예제 #2
0
 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);
     }
 }
예제 #3
0
 public void Stop(bool force = false)
 {
     if (Running)
     {
         ZoneProgram?.Dispose(force);
         UnsetProgram();
         UnsetupInterruptProcessing();
         DisposeAllInterruptingPrograms();
         InterruptingPrograms.Clear();
         Running = false;
     }
 }
예제 #4
0
        /// <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);
        }
예제 #5
0
 /// <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);
     }
 }
예제 #6
0
 /// <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;
 }