diff --git a/runelite-client/src/main/java/com/google/common/eventbus/ImmediateEventBus.java b/runelite-client/src/main/java/com/google/common/eventbus/ImmediateEventBus.java new file mode 100644 index 0000000000..2a35136463 --- /dev/null +++ b/runelite-client/src/main/java/com/google/common/eventbus/ImmediateEventBus.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2018 Tomas Slusny + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package com.google.common.eventbus; + +import com.google.common.util.concurrent.MoreExecutors; + +/** + * An {@link EventBus} dispatches events to subscribers immediately as they're posted without using an + * intermediate queue to change the dispatch order. + */ +public class ImmediateEventBus extends EventBus +{ + /** + * Creates a new ImmediateEventBus with the given {@code identifier}. + */ + public ImmediateEventBus(SubscriberExceptionHandler exceptionHandler) + { + super("default", MoreExecutors.directExecutor(), Dispatcher.immediate(), exceptionHandler); + } +} \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/RuneLiteModule.java b/runelite-client/src/main/java/net/runelite/client/RuneLiteModule.java index 79ed0173d2..7f47c16216 100644 --- a/runelite-client/src/main/java/net/runelite/client/RuneLiteModule.java +++ b/runelite-client/src/main/java/net/runelite/client/RuneLiteModule.java @@ -25,12 +25,14 @@ package net.runelite.client; import com.google.common.eventbus.EventBus; +import com.google.common.eventbus.ImmediateEventBus; import com.google.common.eventbus.SubscriberExceptionContext; import com.google.inject.AbstractModule; import com.google.inject.Provides; import com.google.inject.name.Names; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; +import javax.inject.Named; import javax.inject.Singleton; import lombok.extern.slf4j.Slf4j; import net.runelite.api.Client; @@ -104,6 +106,14 @@ public class RuneLiteModule extends AbstractModule return new EventBus(RuneLiteModule::eventExceptionHandler); } + @Provides + @Singleton + @Named("Immediate EventBus") + EventBus provideImmediateEventBus() + { + return new ImmediateEventBus(RuneLiteModule::eventExceptionHandler); + } + private static void eventExceptionHandler(Throwable exception, SubscriberExceptionContext context) { log.warn("uncaught exception in event subscriber", exception);