@Override public void subscribeActual(final Subscriber<? super T> s) { Scheduler.Worker w = scheduler.createWorker(); final SubscribeOnSubscriber<T> sos = new SubscribeOnSubscriber<T>(s, w, source, nonScheduledRequests); s.onSubscribe(sos); w.schedule(sos); }
@Override public void onSuccess(T value) { this.value = value; DisposableHelper.replace(this, scheduler.scheduleDirect(this)); }
@Override public void subscribeActual(Subscriber<? super Long> s) { IntervalRangeSubscriber is = new IntervalRangeSubscriber(s, start, end); s.onSubscribe(is); Scheduler sch = scheduler; if (sch instanceof TrampolineScheduler) { Worker worker = sch.createWorker(); is.setResource(worker); worker.schedulePeriodically(is, initialDelay, period, unit); } else { Disposable d = sch.schedulePeriodicallyDirect(is, initialDelay, period, unit); is.setResource(d); } }
s.shutdown(); s.shutdown(); assertEquals(Disposables.disposed(), s.scheduleDirect(r)); assertEquals(Disposables.disposed(), s.scheduleDirect(r, 1, TimeUnit.SECONDS)); assertEquals(Disposables.disposed(), s.schedulePeriodicallyDirect(r, 1, 1, TimeUnit.SECONDS)); Worker w = s.createWorker(); w.dispose();
@Override public Timed<T> apply(T t) throws Exception { return new Timed<T>(t, scheduler.now(unit), unit); } }
@Override public void onSubscribe(Subscription s) { if (SubscriptionHelper.validate(this.s, s)) { this.s = s; actual.onSubscribe(this); timer.replace(scheduler.schedulePeriodicallyDirect(this, period, period, unit)); s.request(Long.MAX_VALUE); } }
@Test public void rejectingExecutor() { ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor(); exec.shutdown(); Scheduler s = Schedulers.from(exec); List<Throwable> errors = TestCommonHelper.trackPluginErrors(); try { assertSame(Scheduler.REJECTED, s.scheduleDirect(Functions.EMPTY_RUNNABLE)); assertSame(Scheduler.REJECTED, s.scheduleDirect(Functions.EMPTY_RUNNABLE, 10, TimeUnit.MILLISECONDS)); assertSame(Scheduler.REJECTED, s.schedulePeriodicallyDirect(Functions.EMPTY_RUNNABLE, 10, 10, TimeUnit.MILLISECONDS)); TestCommonHelper.assertUndeliverable(errors, 0, RejectedExecutionException.class); TestCommonHelper.assertUndeliverable(errors, 1, RejectedExecutionException.class); TestCommonHelper.assertUndeliverable(errors, 2, RejectedExecutionException.class); } finally { RxJavaCommonPlugins.reset(); } }
@Override public void run() { s.start(); } };
s.shutdown(); s.shutdown(); assertEquals(Disposables.disposed(), s.scheduleDirect(r)); assertEquals(Disposables.disposed(), s.scheduleDirect(r, 1, TimeUnit.SECONDS)); assertEquals(Disposables.disposed(), s.schedulePeriodicallyDirect(r, 1, 1, TimeUnit.SECONDS)); Worker w = s.createWorker(); w.dispose();
@Override public void onSubscribe(Subscription s) { if (SubscriptionHelper.validate(this.s, s)) { lastTime = scheduler.now(unit); this.s = s; actual.onSubscribe(this); } }
@Test(expected = UnsupportedOperationException.class) public void scheduleDirectPeriodic() { ImmediateThinScheduler.INSTANCE.schedulePeriodicallyDirect(Functions.EMPTY_RUNNABLE, 1, 1, TimeUnit.SECONDS); } @Test
@Test public void rejectingExecutor() { ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor(); exec.shutdown(); Scheduler s = Schedulers.from(exec); List<Throwable> errors = TestCommonHelper.trackPluginErrors(); try { assertSame(Scheduler.REJECTED, s.scheduleDirect(Functions.EMPTY_RUNNABLE)); assertSame(Scheduler.REJECTED, s.scheduleDirect(Functions.EMPTY_RUNNABLE, 10, TimeUnit.MILLISECONDS)); assertSame(Scheduler.REJECTED, s.schedulePeriodicallyDirect(Functions.EMPTY_RUNNABLE, 10, 10, TimeUnit.MILLISECONDS)); TestCommonHelper.assertUndeliverable(errors, 0, RejectedExecutionException.class); TestCommonHelper.assertUndeliverable(errors, 1, RejectedExecutionException.class); TestCommonHelper.assertUndeliverable(errors, 2, RejectedExecutionException.class); } finally { RxJavaCommonPlugins.reset(); } }
@Test public void shutdownRejects() { final int[] calls = { 0 }; Runnable r = new Runnable() { @Override public void run() { calls[0]++; } }; Scheduler s = new SingleScheduler(); s.shutdown(); assertEquals(Disposables.disposed(), s.scheduleDirect(r)); assertEquals(Disposables.disposed(), s.scheduleDirect(r, 1, TimeUnit.SECONDS)); assertEquals(Disposables.disposed(), s.schedulePeriodicallyDirect(r, 1, 1, TimeUnit.SECONDS)); Worker w = s.createWorker(); ((ScheduledWorker)w).executor.shutdownNow(); assertEquals(Disposables.disposed(), w.schedule(r)); assertEquals(Disposables.disposed(), w.schedule(r, 1, TimeUnit.SECONDS)); assertEquals(Disposables.disposed(), w.schedulePeriodically(r, 1, 1, TimeUnit.SECONDS)); assertEquals(0, calls[0]); w.dispose(); assertTrue(w.isDisposed()); }
@NonNull @Override public Worker createWorker() { return eventLoop.createWorker(); }
@Override public void dispose() { Disposable d = getAndSet(DisposableHelper.DISPOSED); if (d != DisposableHelper.DISPOSED) { this.ds = d; scheduler.scheduleDirect(this); } }
@Override public void subscribeActual(Subscriber<? super Long> s) { IntervalSubscriber is = new IntervalSubscriber(s); s.onSubscribe(is); Scheduler sch = scheduler; if (sch instanceof TrampolineScheduler) { Worker worker = sch.createWorker(); is.setResource(worker); worker.schedulePeriodically(is, initialDelay, period, unit); } else { Disposable d = sch.schedulePeriodicallyDirect(is, initialDelay, period, unit); is.setResource(d); } }
@Override public Timed<T> apply(T t) throws Exception { return new Timed<T>(t, scheduler.now(unit), unit); } }