コード例 #1
0
            public IDisposable Run()
            {
                sourceSubscription            = new SingleAssignmentDisposable();
                sourceSubscription.Disposable = parent.source.Subscribe(this);
                ISchedulerPeriodic schedulerPeriodic = parent.scheduler as ISchedulerPeriodic;

                return(StableCompositeDisposable.Create(disposable2: (schedulerPeriodic == null) ? parent.scheduler.Schedule(parent.interval, OnNextRecursive) : schedulerPeriodic.SchedulePeriodic(parent.interval, OnNextTick), disposable1: sourceSubscription));
            }
コード例 #2
0
ファイル: Timer.cs プロジェクト: dotmos/uGameFramework
        protected override IDisposable SubscribeCore(IObserver <long> observer, IDisposable cancel)
        {
            Timer timerObserver = new Timer(observer, cancel);

            TimeSpan dueTime = (dueTimeA != null)
                ? dueTimeA.Value - scheduler.Now
                : dueTimeB.Value;

            // one-shot
            if (period == null)
            {
                return(scheduler.Schedule(Scheduler.Normalize(dueTime), () =>
                {
                    timerObserver.OnNext();
                    timerObserver.OnCompleted();
                }));
            }
            else
            {
                ISchedulerPeriodic periodicScheduler = scheduler as ISchedulerPeriodic;
                if (periodicScheduler != null)
                {
                    if (dueTime == period.Value)
                    {
                        // same(Observable.Interval), run periodic
                        return(periodicScheduler.SchedulePeriodic(Scheduler.Normalize(dueTime), timerObserver.OnNext));
                    }
                    else
                    {
                        // Schedule Once + Scheudle Periodic
                        SerialDisposable disposable = new SerialDisposable();

                        disposable.Disposable = scheduler.Schedule(Scheduler.Normalize(dueTime), () =>
                        {
                            timerObserver.OnNext(); // run first

                            TimeSpan timeP        = Scheduler.Normalize(period.Value);
                            disposable.Disposable = periodicScheduler.SchedulePeriodic(timeP, timerObserver.OnNext); // run periodic
                        });

                        return(disposable);
                    }
                }
                else
                {
                    TimeSpan timeP = Scheduler.Normalize(period.Value);

                    return(scheduler.Schedule(Scheduler.Normalize(dueTime), self =>
                    {
                        timerObserver.OnNext();
                        self(timeP);
                    }));
                }
            }
        }
コード例 #3
0
            public IDisposable Run()
            {
                this.sourceSubscription            = new SingleAssignmentDisposable();
                this.sourceSubscription.Disposable = this.parent.source.Subscribe(this);
                ISchedulerPeriodic schedulerPeriodic = this.parent.scheduler as ISchedulerPeriodic;
                IDisposable        disposable;

                if (schedulerPeriodic != null)
                {
                    disposable = schedulerPeriodic.SchedulePeriodic(this.parent.interval, new Action(this.OnNextTick));
                }
                else
                {
                    disposable = this.parent.scheduler.Schedule(this.parent.interval, new Action <Action <TimeSpan> >(this.OnNextRecursive));
                }
                return(StableCompositeDisposable.Create(this.sourceSubscription, disposable));
            }
コード例 #4
0
ファイル: Buffer.cs プロジェクト: dotmos/uGameFramework
            void CreateTimer()
            {
                long currentTimerId = timerId;
                SingleAssignmentDisposable timerS = new SingleAssignmentDisposable();

                timerD.Disposable = timerS; // restart timer(dispose before)


                ISchedulerPeriodic periodicScheduler = parent.scheduler as ISchedulerPeriodic;

                if (periodicScheduler != null)
                {
                    timerS.Disposable = periodicScheduler.SchedulePeriodic(parent.timeSpan, () => OnNextTick(currentTimerId));
                }
                else
                {
                    timerS.Disposable = parent.scheduler.Schedule(parent.timeSpan, self => OnNextRecursive(currentTimerId, self));
                }
            }
コード例 #5
0
ファイル: Sample.cs プロジェクト: dotmos/uGameFramework
            public IDisposable Run()
            {
                sourceSubscription            = new SingleAssignmentDisposable();
                sourceSubscription.Disposable = parent.source.Subscribe(this);


                IDisposable        scheduling;
                ISchedulerPeriodic periodicScheduler = parent.scheduler as ISchedulerPeriodic;

                if (periodicScheduler != null)
                {
                    scheduling = periodicScheduler.SchedulePeriodic(parent.interval, OnNextTick);
                }
                else
                {
                    scheduling = parent.scheduler.Schedule(parent.interval, OnNextRecursive);
                }

                return(StableCompositeDisposable.Create(sourceSubscription, scheduling));
            }
コード例 #6
0
        protected override IDisposable SubscribeCore(UniRx.IObserver <long> observer, IDisposable cancel)
        {
            Timer    timerObserver = new Timer(observer, cancel);
            TimeSpan timeSpan      = (!dueTimeA.HasValue) ? dueTimeB.Value : (dueTimeA.Value - scheduler.Now);

            if (!period.HasValue)
            {
                return(scheduler.Schedule(Scheduler.Normalize(timeSpan), delegate
                {
                    timerObserver.OnNext();
                    timerObserver.OnCompleted();
                }));
            }
            ISchedulerPeriodic periodicScheduler = scheduler as ISchedulerPeriodic;

            if (periodicScheduler != null)
            {
                if (timeSpan == period.Value)
                {
                    return(periodicScheduler.SchedulePeriodic(Scheduler.Normalize(timeSpan), timerObserver.OnNext));
                }
                SerialDisposable disposable = new SerialDisposable();
                disposable.Disposable = scheduler.Schedule(Scheduler.Normalize(timeSpan), delegate
                {
                    timerObserver.OnNext();
                    TimeSpan timeSpan2    = Scheduler.Normalize(period.Value);
                    disposable.Disposable = periodicScheduler.SchedulePeriodic(timeSpan2, timerObserver.OnNext);
                });
                return(disposable);
            }
            TimeSpan timeP = Scheduler.Normalize(period.Value);

            return(scheduler.Schedule(Scheduler.Normalize(timeSpan), delegate(Action <TimeSpan> self)
            {
                timerObserver.OnNext();
                self(timeP);
            }));
        }
コード例 #7
0
            private void CreateTimer()
            {
                long currentTimerId = timerId;
                SingleAssignmentDisposable singleAssignmentDisposable = new SingleAssignmentDisposable();

                timerD.Disposable = singleAssignmentDisposable;
                ISchedulerPeriodic schedulerPeriodic = parent.scheduler as ISchedulerPeriodic;

                if (schedulerPeriodic != null)
                {
                    singleAssignmentDisposable.Disposable = schedulerPeriodic.SchedulePeriodic(parent.timeSpan, delegate
                    {
                        OnNextTick(currentTimerId);
                    });
                }
                else
                {
                    singleAssignmentDisposable.Disposable = parent.scheduler.Schedule(parent.timeSpan, delegate(Action <TimeSpan> self)
                    {
                        OnNextRecursive(currentTimerId, self);
                    });
                }
            }
コード例 #8
0
ファイル: CatchScheduler.cs プロジェクト: oboukli/reactive
 public CatchSchedulerPeriodic(ISchedulerPeriodic scheduler, Func <TException, bool> handler)
 {
     _scheduler = scheduler;
     _handler   = handler;
 }