Inject and load RS client and applet through Guice
Instead of requiring to create client from RuneLite just use Guice for it and separate applet provider. Signed-off-by: Tomas Slusny <slusnucky@gmail.com>
This commit is contained in:
@@ -31,10 +31,11 @@ import com.google.common.eventbus.EventBus;
|
|||||||
import com.google.inject.Guice;
|
import com.google.inject.Guice;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import com.google.inject.Injector;
|
import com.google.inject.Injector;
|
||||||
import com.google.inject.Provider;
|
|
||||||
import java.applet.Applet;
|
import java.applet.Applet;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
import javax.inject.Provider;
|
||||||
import javax.inject.Singleton;
|
import javax.inject.Singleton;
|
||||||
import joptsimple.ArgumentAcceptingOptionSpec;
|
import joptsimple.ArgumentAcceptingOptionSpec;
|
||||||
import joptsimple.OptionParser;
|
import joptsimple.OptionParser;
|
||||||
@@ -130,9 +131,6 @@ public class RuneLite
|
|||||||
@Inject
|
@Inject
|
||||||
private InfoBoxManager infoBoxManager;
|
private InfoBoxManager infoBoxManager;
|
||||||
|
|
||||||
@Inject
|
|
||||||
private ClientLoader clientLoader;
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private OverlayManager overlayManager;
|
private OverlayManager overlayManager;
|
||||||
|
|
||||||
@@ -145,7 +143,13 @@ public class RuneLite
|
|||||||
@Inject
|
@Inject
|
||||||
private WorldMapOverlay worldMapOverlay;
|
private WorldMapOverlay worldMapOverlay;
|
||||||
|
|
||||||
Client client;
|
@Inject
|
||||||
|
@Nullable
|
||||||
|
private Applet applet;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
@Nullable
|
||||||
|
private Client client;
|
||||||
|
|
||||||
public static void main(String[] args) throws Exception
|
public static void main(String[] args) throws Exception
|
||||||
{
|
{
|
||||||
@@ -209,27 +213,23 @@ public class RuneLite
|
|||||||
});
|
});
|
||||||
|
|
||||||
injector = Guice.createInjector(new RuneLiteModule());
|
injector = Guice.createInjector(new RuneLiteModule());
|
||||||
injector.getInstance(RuneLite.class).start(getOptions().valueOf(updateMode));
|
injector.getInstance(ClientLoader.class).setUpdateCheckMode(getOptions().valueOf(updateMode));
|
||||||
|
injector.getInstance(RuneLite.class).start();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void start(ClientUpdateCheckMode updateMode) throws Exception
|
public void start() throws Exception
|
||||||
{
|
{
|
||||||
// Load RuneLite or Vanilla client
|
// Load RuneLite or Vanilla client
|
||||||
clientLoader.setUpdateCheckMode(updateMode);
|
final boolean isOutdated = client == null;
|
||||||
final Applet client = clientLoader.load();
|
|
||||||
|
|
||||||
final boolean isOutdated = !(client instanceof Client);
|
|
||||||
|
|
||||||
if (!isOutdated)
|
if (!isOutdated)
|
||||||
{
|
{
|
||||||
this.client = (Client) client;
|
|
||||||
|
|
||||||
// Inject members into client
|
// Inject members into client
|
||||||
injector.injectMembers(client);
|
injector.injectMembers(client);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize UI
|
// Initialize UI
|
||||||
clientUI.init(client);
|
clientUI.init(applet);
|
||||||
|
|
||||||
// Initialize Discord service
|
// Initialize Discord service
|
||||||
discordService.init();
|
discordService.init();
|
||||||
@@ -246,7 +246,7 @@ public class RuneLite
|
|||||||
eventBus.register(clanManager);
|
eventBus.register(clanManager);
|
||||||
eventBus.register(infoBoxManager);
|
eventBus.register(infoBoxManager);
|
||||||
|
|
||||||
if (this.client != null)
|
if (!isOutdated)
|
||||||
{
|
{
|
||||||
eventBus.register(itemManager.get());
|
eventBus.register(itemManager.get());
|
||||||
}
|
}
|
||||||
@@ -304,10 +304,4 @@ public class RuneLite
|
|||||||
{
|
{
|
||||||
RuneLite.options = options;
|
RuneLite.options = options;
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
|
||||||
public void setClient(Client client)
|
|
||||||
{
|
|
||||||
this.client = client;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,8 +29,10 @@ import com.google.common.eventbus.SubscriberExceptionContext;
|
|||||||
import com.google.inject.AbstractModule;
|
import com.google.inject.AbstractModule;
|
||||||
import com.google.inject.Provides;
|
import com.google.inject.Provides;
|
||||||
import com.google.inject.name.Names;
|
import com.google.inject.name.Names;
|
||||||
|
import java.applet.Applet;
|
||||||
import java.util.concurrent.Executors;
|
import java.util.concurrent.Executors;
|
||||||
import java.util.concurrent.ScheduledExecutorService;
|
import java.util.concurrent.ScheduledExecutorService;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
import javax.inject.Singleton;
|
import javax.inject.Singleton;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import net.runelite.api.Client;
|
import net.runelite.api.Client;
|
||||||
@@ -44,6 +46,7 @@ import net.runelite.client.config.RuneLiteConfig;
|
|||||||
import net.runelite.client.game.ItemManager;
|
import net.runelite.client.game.ItemManager;
|
||||||
import net.runelite.client.menus.MenuManager;
|
import net.runelite.client.menus.MenuManager;
|
||||||
import net.runelite.client.plugins.PluginManager;
|
import net.runelite.client.plugins.PluginManager;
|
||||||
|
import net.runelite.client.rs.ClientLoader;
|
||||||
import net.runelite.client.task.Scheduler;
|
import net.runelite.client.task.Scheduler;
|
||||||
import net.runelite.client.util.DeferredEventBus;
|
import net.runelite.client.util.DeferredEventBus;
|
||||||
import net.runelite.client.util.QueryRunner;
|
import net.runelite.client.util.QueryRunner;
|
||||||
@@ -81,9 +84,17 @@ public class RuneLiteModule extends AbstractModule
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
Client provideClient(RuneLite runeLite)
|
@Singleton
|
||||||
|
Applet provideApplet(ClientLoader clientLoader)
|
||||||
{
|
{
|
||||||
return runeLite.client;
|
return clientLoader.load();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
@Singleton
|
||||||
|
Client provideClient(@Nullable Applet applet)
|
||||||
|
{
|
||||||
|
return applet instanceof Client ? (Client) applet : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
|
|||||||
@@ -30,11 +30,13 @@ import java.io.IOException;
|
|||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.net.URLClassLoader;
|
import java.net.URLClassLoader;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
import javax.inject.Singleton;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import net.runelite.http.api.updatecheck.UpdateCheckClient;
|
import net.runelite.http.api.updatecheck.UpdateCheckClient;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
|
@Singleton
|
||||||
public class ClientLoader
|
public class ClientLoader
|
||||||
{
|
{
|
||||||
private final UpdateCheckClient updateCheckClient = new UpdateCheckClient();
|
private final UpdateCheckClient updateCheckClient = new UpdateCheckClient();
|
||||||
|
|||||||
@@ -31,7 +31,9 @@ import com.google.inject.Injector;
|
|||||||
import com.google.inject.Module;
|
import com.google.inject.Module;
|
||||||
import com.google.inject.grapher.graphviz.GraphvizGrapher;
|
import com.google.inject.grapher.graphviz.GraphvizGrapher;
|
||||||
import com.google.inject.grapher.graphviz.GraphvizModule;
|
import com.google.inject.grapher.graphviz.GraphvizModule;
|
||||||
|
import com.google.inject.testing.fieldbinder.Bind;
|
||||||
import com.google.inject.testing.fieldbinder.BoundFieldModule;
|
import com.google.inject.testing.fieldbinder.BoundFieldModule;
|
||||||
|
import java.applet.Applet;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
@@ -63,11 +65,15 @@ public class PluginManagerTest
|
|||||||
@Rule
|
@Rule
|
||||||
public TemporaryFolder folder = new TemporaryFolder();
|
public TemporaryFolder folder = new TemporaryFolder();
|
||||||
|
|
||||||
private RuneLite runelite;
|
@Mock
|
||||||
private Set<Class> pluginClasses;
|
@Bind
|
||||||
|
public Applet applet;
|
||||||
|
|
||||||
@Mock
|
@Mock
|
||||||
Client client;
|
@Bind
|
||||||
|
public Client client;
|
||||||
|
|
||||||
|
private Set<Class> pluginClasses;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void before() throws IOException
|
public void before() throws IOException
|
||||||
@@ -78,8 +84,6 @@ public class PluginManagerTest
|
|||||||
BoundFieldModule.of(this));
|
BoundFieldModule.of(this));
|
||||||
RuneLite.setInjector(injector);
|
RuneLite.setInjector(injector);
|
||||||
|
|
||||||
runelite = injector.getInstance(RuneLite.class);
|
|
||||||
|
|
||||||
// Find plugins we expect to have
|
// Find plugins we expect to have
|
||||||
pluginClasses = new HashSet<>();
|
pluginClasses = new HashSet<>();
|
||||||
Set<ClassInfo> classes = ClassPath.from(getClass().getClassLoader()).getTopLevelClassesRecursive(PLUGIN_PACKAGE);
|
Set<ClassInfo> classes = ClassPath.from(getClass().getClassLoader()).getTopLevelClassesRecursive(PLUGIN_PACKAGE);
|
||||||
@@ -105,12 +109,10 @@ public class PluginManagerTest
|
|||||||
long expected = pluginClasses.stream()
|
long expected = pluginClasses.stream()
|
||||||
.map(cl -> (PluginDescriptor) cl.getAnnotation(PluginDescriptor.class))
|
.map(cl -> (PluginDescriptor) cl.getAnnotation(PluginDescriptor.class))
|
||||||
.filter(Objects::nonNull)
|
.filter(Objects::nonNull)
|
||||||
.filter(pd -> pd.loadWhenOutdated())
|
.filter(PluginDescriptor::loadWhenOutdated)
|
||||||
.count();
|
.count();
|
||||||
assertEquals(expected, plugins.size());
|
assertEquals(expected, plugins.size());
|
||||||
|
|
||||||
runelite.setClient(client);
|
|
||||||
|
|
||||||
pluginManager = new PluginManager();
|
pluginManager = new PluginManager();
|
||||||
pluginManager.loadCorePlugins();
|
pluginManager.loadCorePlugins();
|
||||||
plugins = pluginManager.getPlugins();
|
plugins = pluginManager.getPlugins();
|
||||||
@@ -130,8 +132,6 @@ public class PluginManagerTest
|
|||||||
modules.add(new GraphvizModule());
|
modules.add(new GraphvizModule());
|
||||||
modules.add(new RuneLiteModule());
|
modules.add(new RuneLiteModule());
|
||||||
|
|
||||||
runelite.setClient(client);
|
|
||||||
|
|
||||||
PluginManager pluginManager = new PluginManager();
|
PluginManager pluginManager = new PluginManager();
|
||||||
pluginManager.loadCorePlugins();
|
pluginManager.loadCorePlugins();
|
||||||
for (Plugin p : pluginManager.getPlugins())
|
for (Plugin p : pluginManager.getPlugins())
|
||||||
|
|||||||
Reference in New Issue
Block a user