Add Scheduler suppliers directly to EventScheduler enum

This commit is contained in:
Lucwousin
2019-12-15 01:23:09 +01:00
parent 60f26a8c41
commit c691351825
2 changed files with 17 additions and 48 deletions

View File

@@ -9,7 +9,6 @@ import io.reactivex.annotations.Nullable;
import io.reactivex.disposables.CompositeDisposable; import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.disposables.Disposable; import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer; import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;
import io.sentry.Sentry; import io.sentry.Sentry;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@@ -19,7 +18,6 @@ import javax.inject.Singleton;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.runelite.api.events.Event; import net.runelite.api.events.Event;
import net.runelite.client.RuneLiteProperties; import net.runelite.client.RuneLiteProperties;
import net.runelite.client.callback.ClientThread;
import net.runelite.client.config.OpenOSRSConfig; import net.runelite.client.config.OpenOSRSConfig;
@Slf4j @Slf4j
@@ -33,9 +31,6 @@ public class EventBus implements EventBusInterface
@Inject @Inject
private OpenOSRSConfig openOSRSConfig; private OpenOSRSConfig openOSRSConfig;
@Inject
private ClientThread clientThread;
@NonNull @NonNull
private <T extends Event> Relay<Object> getSubject(Class<T> eventClass) private <T extends Event> Relay<Object> getSubject(Class<T> eventClass)
{ {
@@ -60,41 +55,9 @@ public class EventBus implements EventBusInterface
return observable -> until > 0 ? observable.take(until) : observable; return observable -> until > 0 ? observable.take(until) : observable;
} }
private Scheduler getScheduler(EventScheduler scheduler)
{
Scheduler subscribeScheduler;
switch (scheduler)
{
case COMPUTATION:
subscribeScheduler = Schedulers.computation();
break;
case IO:
subscribeScheduler = Schedulers.io();
break;
case NEWTHREAD:
subscribeScheduler = Schedulers.newThread();
break;
case SINGLE:
subscribeScheduler = Schedulers.single();
break;
case TRAMPOLINE:
subscribeScheduler = Schedulers.trampoline();
break;
case CLIENT:
subscribeScheduler = Schedulers.from(clientThread);
break;
case DEFAULT:
default:
subscribeScheduler = null;
break;
}
return subscribeScheduler;
}
private <T> ObservableTransformer<T, T> applyScheduler(EventScheduler eventScheduler, boolean subscribe) private <T> ObservableTransformer<T, T> applyScheduler(EventScheduler eventScheduler, boolean subscribe)
{ {
Scheduler scheduler = getScheduler(eventScheduler); Scheduler scheduler = eventScheduler.get();
return observable -> scheduler == null ? observable : subscribe ? observable.subscribeOn(scheduler) : observable.observeOn(scheduler); return observable -> scheduler == null ? observable : subscribe ? observable.subscribeOn(scheduler) : observable.observeOn(scheduler);
} }

View File

@@ -1,21 +1,27 @@
package net.runelite.client.eventbus; package net.runelite.client.eventbus;
import io.reactivex.Scheduler;
import io.reactivex.annotations.Nullable; import io.reactivex.annotations.Nullable;
import io.reactivex.schedulers.Schedulers;
import java.util.function.Supplier;
import lombok.AllArgsConstructor;
@AllArgsConstructor
public enum EventScheduler public enum EventScheduler
{ {
DEFAULT(null), DEFAULT(() -> null),
COMPUTATION("computation"), COMPUTATION(Schedulers::computation),
IO("io"), IO(Schedulers::io),
NEWTHREAD("newThread"), NEWTHREAD(Schedulers::newThread),
SINGLE("single"), SINGLE(Schedulers::single),
TRAMPOLINE("trampoline"), TRAMPOLINE(Schedulers::trampoline),
CLIENT("client"); CLIENT(Schedulers::single);
public final String scheduler; private Supplier<Scheduler> scheduler;
EventScheduler(@Nullable String scheduler) @Nullable
public Scheduler get()
{ {
this.scheduler = scheduler; return scheduler.get();
} }
} }