public Custom ( IData customList, IPushDataController deviceObserver, int durationMs, int loop = null ) : Task | ||
customList | IData | |
deviceObserver | IPushDataController | |
durationMs | int | |
loop | int | |
return | Task |
public Task Custom(IData[] customList, IPushDataController deviceObserver, int durationMs, int? loop = null)
{
var taskSource = new TaskCompletionSource<bool>();
if (customList == null || customList.Length == 0)
throw new ArgumentNullException("customList");
CancellationTokenSource cancelSource = null;
var observer = Observer.Create<long>(
onNext: elapsedMs =>
{
if (loop.HasValue)
{
long loopCounter = elapsedMs / durationMs;
if (loopCounter >= loop.Value)
{
foreach (var kvp in customList[customList.Length - 1])
deviceObserver.Data[kvp.Key] = kvp.Value;
deviceObserver.PushData();
log.Debug("Cancel 9");
cancelSource.Cancel();
return;
}
}
double instanceMs = elapsedMs % durationMs;
int pos = (int)(customList.Length * instanceMs / durationMs);
foreach (var kvp in customList[pos])
deviceObserver.Data[kvp.Key] = kvp.Value;
deviceObserver.PushData();
},
onCompleted: () =>
{
taskSource.SetResult(true);
});
cancelSource = this.timerJobRunner.AddTimerJobMs(observer, loop.HasValue ? durationMs * loop.Value : (long?)null);
Executor.Current.SetManagedTask(taskSource.Task, cancelSource);
return taskSource.Task;
}
MasterEffect::Custom ( IData customList, IReceivesBrightness device, int durationMs, int loop = null, int priority = 1 ) : Task | |
MasterEffect::Custom ( double customList, IPushDataController deviceObserver, int durationMs, int loop = null ) : Task | |
MasterEffect::Custom ( double customList, IReceivesBrightness device, int durationMs, int loop = null, int priority = 1 ) : Task |