Animatroller.Framework.Effect2.MasterEffect.Custom C# (CSharp) Method

Custom() public method

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;
        }

Same methods

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