public void StopExistingTask(ILogicalDevice device, Cue.CueParts cuePart) { var key = Tuple.Create(device, cuePart); Task existingTask; if (this.tasks.TryGetValue(key, out existingTask)) { // Stop existing Executor.Current.StopManagedTask(existingTask); } }
public CuePart(Cue parent) { this.parent = parent; }
public void AddNewTask(ILogicalDevice device, Cue.CueParts cuePart, Task task, Action mibCheck = null) { var key = Tuple.Create(device, cuePart); this.tasks[key] = task; task.ContinueWith(x => { this.tasks.Remove(key); }); if (mibCheck != null) { task.ContinueWith(x => { if (!x.IsCanceled) mibCheck(); }); } }
private void StopCurrentTask(ILogicalDevice device, Cue.CueParts cuePart) { if (this.currentInstance == null) return; this.currentInstance.StopExistingTask(device, cuePart); }
private void RunCue(int cueId, Cue cue, bool snap, bool lastCue) { var watch = Stopwatch.StartNew(); CancellationTokenSource cancelSource; if (this.triggerCancelSources.TryGetValue(cue, out cancelSource)) { cancelSource.Cancel(); } this.currentCueId.OnNext(cueId); var cueInstance = new CueInstance(); if (cue.PartIntensity != null) { foreach (var device in cue.Devices) { var brightnessDevice = device as IReceivesBrightness; if (brightnessDevice == null) continue; var observer = GetControlledObserverBrightness(brightnessDevice); StopCurrentTask(device, Cue.CueParts.Intensity); var fadeTask = Executor.Current.MasterEffect.Fade( observer, brightnessDevice.Brightness, cue.PartIntensity.Destination, snap ? 0 : cue.PartIntensity.FadeMs); cueInstance.AddNewTask(device, Cue.CueParts.Intensity, fadeTask, () => MibCheck(cueId, device)); } } if (cue.PartColor != null) { foreach (var device in cue.Devices) { var colorDevice = device as IReceivesColor; if (colorDevice == null) continue; var observer = GetControlledObserverColor(colorDevice); StopCurrentTask(device, Cue.CueParts.Color); var fadeTask = Executor.Current.MasterEffect.Fade( observer, colorDevice.Color, cue.PartColor.Destination, snap ? 0 : cue.PartColor.FadeMs); cueInstance.AddNewTask(device, Cue.CueParts.Color, fadeTask); } } if (cue.PartPan != null) { foreach (var device in cue.Devices) { var panTiltDevice = device as IReceivesPanTilt; if (panTiltDevice == null) continue; var observer = GetControlledObserverPan(panTiltDevice); StopCurrentTask(device, Cue.CueParts.Pan); var fadeTask = Executor.Current.MasterEffect.Fade( observer, panTiltDevice.Pan, cue.PartPan.Destination, snap ? 0 : cue.PartPan.FadeMs); cueInstance.AddNewTask(device, Cue.CueParts.Pan, fadeTask); } } if (cue.PartTilt != null) { foreach (var device in cue.Devices) { var panTiltDevice = device as IReceivesPanTilt; if (panTiltDevice == null) continue; var observer = GetControlledObserverTilt(panTiltDevice); StopCurrentTask(device, Cue.CueParts.Tilt); var fadeTask = Executor.Current.MasterEffect.Fade( observer, panTiltDevice.Tilt, cue.PartTilt.Destination, snap ? 0 : cue.PartTilt.FadeMs); cueInstance.AddNewTask(device, Cue.CueParts.Tilt, fadeTask); } } this.currentInstance = cueInstance; var allTasks = cueInstance.GetAllTasks(); if (allTasks.Length > 0) { Task.WhenAll(allTasks).ContinueWith(x => { watch.Stop(); this.cueCompleted.OnNext(Tuple.Create(cueId, watch.ElapsedMilliseconds)); if (!snap && lastCue) { this.currentCueId.OnNext(null); this.currentInstance = null; ReleaseLocks(); } }); } else { watch.Stop(); this.cueCompleted.OnNext(Tuple.Create(cueId, watch.ElapsedMilliseconds)); } }
public CueList AddCue(Cue cue, params ILogicalDevice[] devices) { cue.Devices.AddRange(devices); this.cues.Add(cue); return this; }
public CueList AddCue(Cue cue) { this.cues.Add(cue); return this; }