From 47c375cb035dfe72c0c6717cdc4b89ff0accf217 Mon Sep 17 00:00:00 2001 From: Adam Date: Fri, 26 Jun 2020 13:44:14 -0400 Subject: [PATCH] client: use guice provided http client everywhere --- .../runelite/cache/util/XteaKeyManager.java | 3 +- http-api/pom.xml | 5 --- .../http/api/account/AccountClient.java | 32 ++++++++--------- .../runelite/http/api/chat/ChatClient.java | 33 +++++++++-------- .../http/api/config/ConfigClient.java | 35 +++++++++---------- .../http/api/examine/ExamineClient.java | 19 +++++----- .../runelite/http/api/feed/FeedClient.java | 19 ++++------ .../http/api/ge/GrandExchangeClient.java | 7 +++- .../http/api/hiscore/HiscoreClient.java | 8 +++-- .../runelite/http/api/item/ItemClient.java | 23 +++++------- .../api/loottracker/LootTrackerClient.java | 8 +++-- .../api/osbuddy/OSBGrandExchangeClient.java | 7 +++- .../runelite/http/api/worlds/WorldClient.java | 19 ++++------ .../net/runelite/http/api/xp/XpClient.java | 18 ++++++---- .../runelite/http/api/xtea/XteaClient.java | 21 ++++++----- .../http/service/hiscore/HiscoreService.java | 3 +- .../runelite/client/ClientSessionManager.java | 8 +++-- .../java/net/runelite/client/RuneLite.java | 13 ++++++- .../net/runelite/client/RuneLiteModule.java | 17 +++++---- .../net/runelite/client/SessionClient.java | 11 ++++-- .../client/account/SessionManager.java | 16 +++++---- .../runelite/client/config/ConfigManager.java | 20 ++++++----- .../ExternalPluginManager.java | 7 ++-- .../runelite/client/game/HiscoreManager.java | 8 ++--- .../net/runelite/client/game/ItemManager.java | 11 +++--- .../runelite/client/game/WorldService.java | 5 +-- .../chatcommands/ChatCommandsPlugin.java | 12 +++++-- .../client/plugins/discord/DiscordPlugin.java | 9 +++-- .../client/plugins/examine/ExaminePlugin.java | 8 +++++ .../client/plugins/feed/FeedPanel.java | 12 +++++-- .../client/plugins/feed/FeedPlugin.java | 24 +++++++++++-- .../grandexchange/GrandExchangePlugin.java | 19 ++++++++-- .../client/plugins/hiscore/HiscorePanel.java | 23 ++++++------ .../loottracker/LootTrackerPlugin.java | 8 +++-- .../client/plugins/raids/RaidsPlugin.java | 2 +- .../client/plugins/slayer/SlayerPlugin.java | 2 +- .../wiki/WikiSearchChatboxTextInput.java | 9 +++-- .../plugins/xptracker/XpTrackerPlugin.java | 11 +++++- .../plugins/xpupdater/XpUpdaterPlugin.java | 17 +++++---- .../client/plugins/xtea/XteaPlugin.java | 13 +++++-- .../client/rs/ClientConfigLoader.java | 12 +++---- .../net/runelite/client/rs/ClientLoader.java | 19 ++++++---- .../net/runelite/client/rs/WorldSupplier.java | 7 ++-- .../runelite/client/util/ImageCapture.java | 6 +++- .../java/net/runelite/client/ws/WSClient.java | 7 ++-- .../client/plugins/PluginManagerTest.java | 28 +++++++++------ .../chatcommands/ChatCommandsPluginTest.java | 5 +++ .../GrandExchangePluginTest.java | 5 +++ .../plugins/hiscore/HiscorePanelTest.java | 4 ++- .../client/plugins/raids/RaidsPluginTest.java | 5 +++ .../xptracker/XpTrackerPluginTest.java | 5 +++ .../client/rs/ClientConfigLoaderTest.java | 3 +- 52 files changed, 407 insertions(+), 244 deletions(-) diff --git a/cache/src/main/java/net/runelite/cache/util/XteaKeyManager.java b/cache/src/main/java/net/runelite/cache/util/XteaKeyManager.java index 80f8dbf981..38ba347d4b 100644 --- a/cache/src/main/java/net/runelite/cache/util/XteaKeyManager.java +++ b/cache/src/main/java/net/runelite/cache/util/XteaKeyManager.java @@ -27,6 +27,7 @@ package net.runelite.cache.util; import java.io.IOException; import java.util.HashMap; import java.util.Map; +import net.runelite.http.api.RuneLiteAPI; import net.runelite.http.api.xtea.XteaClient; import net.runelite.http.api.xtea.XteaKey; import org.slf4j.Logger; @@ -40,7 +41,7 @@ public class XteaKeyManager public void loadKeys() { - XteaClient xteaClient = new XteaClient(); + XteaClient xteaClient = new XteaClient(RuneLiteAPI.CLIENT); try { diff --git a/http-api/pom.xml b/http-api/pom.xml index 8a52a759ff..dcd491b4f1 100644 --- a/http-api/pom.xml +++ b/http-api/pom.xml @@ -63,11 +63,6 @@ commons-csv 1.4 - - javax.inject - javax.inject - 1 - junit diff --git a/http-api/src/main/java/net/runelite/http/api/account/AccountClient.java b/http-api/src/main/java/net/runelite/http/api/account/AccountClient.java index 0a286cd70e..625be00ad0 100644 --- a/http-api/src/main/java/net/runelite/http/api/account/AccountClient.java +++ b/http-api/src/main/java/net/runelite/http/api/account/AccountClient.java @@ -29,24 +29,22 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.UUID; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import net.runelite.http.api.RuneLiteAPI; import okhttp3.HttpUrl; +import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +@Slf4j +@RequiredArgsConstructor public class AccountClient { - private static final Logger logger = LoggerFactory.getLogger(AccountClient.class); - + private final OkHttpClient client; private UUID uuid; - public AccountClient() - { - } - - public AccountClient(UUID uuid) + public void setUuid(UUID uuid) { this.uuid = uuid; } @@ -59,13 +57,13 @@ public class AccountClient .addQueryParameter("uuid", uuid.toString()) .build(); - logger.debug("Built URI: {}", url); + log.debug("Built URI: {}", url); Request request = new Request.Builder() .url(url) .build(); - try (Response response = RuneLiteAPI.CLIENT.newCall(request).execute()) + try (Response response = client.newCall(request).execute()) { InputStream in = response.body().byteStream(); return RuneLiteAPI.GSON.fromJson(new InputStreamReader(in), OAuthResponse.class); @@ -83,16 +81,16 @@ public class AccountClient .addPathSegment("logout") .build(); - logger.debug("Built URI: {}", url); + log.debug("Built URI: {}", url); Request request = new Request.Builder() .header(RuneLiteAPI.RUNELITE_AUTH, uuid.toString()) .url(url) .build(); - try (Response response = RuneLiteAPI.CLIENT.newCall(request).execute()) + try (Response response = client.newCall(request).execute()) { - logger.debug("Sent logout request"); + log.debug("Sent logout request"); } } @@ -103,20 +101,20 @@ public class AccountClient .addPathSegment("session-check") .build(); - logger.debug("Built URI: {}", url); + log.debug("Built URI: {}", url); Request request = new Request.Builder() .header(RuneLiteAPI.RUNELITE_AUTH, uuid.toString()) .url(url) .build(); - try (Response response = RuneLiteAPI.CLIENT.newCall(request).execute()) + try (Response response = client.newCall(request).execute()) { return response.isSuccessful(); } catch (IOException ex) { - logger.debug("Unable to verify session", ex); + log.debug("Unable to verify session", ex); return true; // assume it is still valid if the server is unreachable } } diff --git a/http-api/src/main/java/net/runelite/http/api/chat/ChatClient.java b/http-api/src/main/java/net/runelite/http/api/chat/ChatClient.java index 3c1565effd..f3a0b41c30 100644 --- a/http-api/src/main/java/net/runelite/http/api/chat/ChatClient.java +++ b/http-api/src/main/java/net/runelite/http/api/chat/ChatClient.java @@ -28,14 +28,19 @@ import com.google.gson.JsonParseException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import lombok.AllArgsConstructor; import net.runelite.http.api.RuneLiteAPI; import okhttp3.HttpUrl; +import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; +@AllArgsConstructor public class ChatClient { + private final OkHttpClient client; + public boolean submitKc(String username, String boss, int kc) throws IOException { HttpUrl url = RuneLiteAPI.getApiBase().newBuilder() @@ -51,7 +56,7 @@ public class ChatClient .url(url) .build(); - try (Response response = RuneLiteAPI.CLIENT.newCall(request).execute()) + try (Response response = client.newCall(request).execute()) { return response.isSuccessful(); } @@ -70,7 +75,7 @@ public class ChatClient .url(url) .build(); - try (Response response = RuneLiteAPI.CLIENT.newCall(request).execute()) + try (Response response = client.newCall(request).execute()) { if (!response.isSuccessful()) { @@ -94,7 +99,7 @@ public class ChatClient .url(url) .build(); - try (Response response = RuneLiteAPI.CLIENT.newCall(request).execute()) + try (Response response = client.newCall(request).execute()) { return response.isSuccessful(); } @@ -112,7 +117,7 @@ public class ChatClient .url(url) .build(); - try (Response response = RuneLiteAPI.CLIENT.newCall(request).execute()) + try (Response response = client.newCall(request).execute()) { if (!response.isSuccessful()) { @@ -139,7 +144,7 @@ public class ChatClient .url(url) .build(); - try (Response response = RuneLiteAPI.CLIENT.newCall(request).execute()) + try (Response response = client.newCall(request).execute()) { return response.isSuccessful(); } @@ -157,7 +162,7 @@ public class ChatClient .url(url) .build(); - try (Response response = RuneLiteAPI.CLIENT.newCall(request).execute()) + try (Response response = client.newCall(request).execute()) { if (!response.isSuccessful()) { @@ -188,7 +193,7 @@ public class ChatClient .url(url) .build(); - try (Response response = RuneLiteAPI.CLIENT.newCall(request).execute()) + try (Response response = client.newCall(request).execute()) { return response.isSuccessful(); } @@ -207,7 +212,7 @@ public class ChatClient .url(url) .build(); - try (Response response = RuneLiteAPI.CLIENT.newCall(request).execute()) + try (Response response = client.newCall(request).execute()) { if (!response.isSuccessful()) { @@ -231,7 +236,7 @@ public class ChatClient .url(url) .build(); - try (Response response = RuneLiteAPI.CLIENT.newCall(request).execute()) + try (Response response = client.newCall(request).execute()) { return response.isSuccessful(); } @@ -249,7 +254,7 @@ public class ChatClient .url(url) .build(); - try (Response response = RuneLiteAPI.CLIENT.newCall(request).execute()) + try (Response response = client.newCall(request).execute()) { if (!response.isSuccessful()) { @@ -276,7 +281,7 @@ public class ChatClient .url(url) .build(); - try (Response response = RuneLiteAPI.CLIENT.newCall(request).execute()) + try (Response response = client.newCall(request).execute()) { return response.isSuccessful(); } @@ -294,7 +299,7 @@ public class ChatClient .url(url) .build(); - try (Response response = RuneLiteAPI.CLIENT.newCall(request).execute()) + try (Response response = client.newCall(request).execute()) { if (!response.isSuccessful()) { @@ -323,7 +328,7 @@ public class ChatClient .url(url) .build(); - try (Response response = RuneLiteAPI.CLIENT.newCall(request).execute()) + try (Response response = client.newCall(request).execute()) { return response.isSuccessful(); } @@ -341,7 +346,7 @@ public class ChatClient .url(url) .build(); - try (Response response = RuneLiteAPI.CLIENT.newCall(request).execute()) + try (Response response = client.newCall(request).execute()) { if (!response.isSuccessful()) { diff --git a/http-api/src/main/java/net/runelite/http/api/config/ConfigClient.java b/http-api/src/main/java/net/runelite/http/api/config/ConfigClient.java index c82c7d0f22..62704a8ff1 100644 --- a/http-api/src/main/java/net/runelite/http/api/config/ConfigClient.java +++ b/http-api/src/main/java/net/runelite/http/api/config/ConfigClient.java @@ -30,44 +30,41 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.util.UUID; import java.util.concurrent.CompletableFuture; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; import net.runelite.http.api.RuneLiteAPI; import okhttp3.Call; import okhttp3.Callback; import okhttp3.HttpUrl; import okhttp3.MediaType; +import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +@AllArgsConstructor +@Slf4j public class ConfigClient { - private static final Logger logger = LoggerFactory.getLogger(ConfigClient.class); - private static final MediaType TEXT_PLAIN = MediaType.parse("text/plain"); + private final OkHttpClient client; private final UUID uuid; - public ConfigClient(UUID uuid) - { - this.uuid = uuid; - } - public Configuration get() throws IOException { HttpUrl url = RuneLiteAPI.getApiBase().newBuilder() .addPathSegment("config") .build(); - logger.debug("Built URI: {}", url); + log.debug("Built URI: {}", url); Request request = new Request.Builder() .header(RuneLiteAPI.RUNELITE_AUTH, uuid.toString()) .url(url) .build(); - try (Response response = RuneLiteAPI.CLIENT.newCall(request).execute()) + try (Response response = client.newCall(request).execute()) { InputStream in = response.body().byteStream(); return RuneLiteAPI.GSON.fromJson(new InputStreamReader(in), Configuration.class); @@ -87,7 +84,7 @@ public class ConfigClient .addPathSegment(key) .build(); - logger.debug("Built URI: {}", url); + log.debug("Built URI: {}", url); Request request = new Request.Builder() .put(RequestBody.create(TEXT_PLAIN, value)) @@ -95,12 +92,12 @@ public class ConfigClient .url(url) .build(); - RuneLiteAPI.CLIENT.newCall(request).enqueue(new Callback() + client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { - logger.warn("Unable to synchronize configuration item", e); + log.warn("Unable to synchronize configuration item", e); future.completeExceptionally(e); } @@ -108,7 +105,7 @@ public class ConfigClient public void onResponse(Call call, Response response) { response.close(); - logger.debug("Synchronized configuration value '{}' to '{}'", key, value); + log.debug("Synchronized configuration value '{}' to '{}'", key, value); future.complete(null); } }); @@ -125,7 +122,7 @@ public class ConfigClient .addPathSegment(key) .build(); - logger.debug("Built URI: {}", url); + log.debug("Built URI: {}", url); Request request = new Request.Builder() .delete() @@ -133,12 +130,12 @@ public class ConfigClient .url(url) .build(); - RuneLiteAPI.CLIENT.newCall(request).enqueue(new Callback() + client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { - logger.warn("Unable to unset configuration item", e); + log.warn("Unable to unset configuration item", e); future.completeExceptionally(e); } @@ -146,7 +143,7 @@ public class ConfigClient public void onResponse(Call call, Response response) { response.close(); - logger.debug("Unset configuration value '{}'", key); + log.debug("Unset configuration value '{}'", key); future.complete(null); } }); diff --git a/http-api/src/main/java/net/runelite/http/api/examine/ExamineClient.java b/http-api/src/main/java/net/runelite/http/api/examine/ExamineClient.java index 5997799c2e..3271f9994e 100644 --- a/http-api/src/main/java/net/runelite/http/api/examine/ExamineClient.java +++ b/http-api/src/main/java/net/runelite/http/api/examine/ExamineClient.java @@ -25,23 +25,26 @@ package net.runelite.http.api.examine; import java.io.IOException; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import net.runelite.http.api.RuneLiteAPI; import okhttp3.Call; import okhttp3.Callback; import okhttp3.HttpUrl; import okhttp3.MediaType; +import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +@Slf4j +@RequiredArgsConstructor public class ExamineClient { - private static final Logger logger = LoggerFactory.getLogger(ExamineClient.class); - private static final MediaType TEXT = MediaType.parse("text"); + private final OkHttpClient client; + public void submitObject(int id, String text) { submit("object", id, text); @@ -65,26 +68,26 @@ public class ExamineClient .addPathSegment(Integer.toString(id)) .build(); - logger.debug("Built URI: {}", url); + log.debug("Built URI: {}", url); Request request = new Request.Builder() .url(url) .post(RequestBody.create(TEXT, text)) .build(); - RuneLiteAPI.CLIENT.newCall(request).enqueue(new Callback() + client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { - logger.warn("Error submitting examine", e); + log.warn("Error submitting examine", e); } @Override public void onResponse(Call call, Response response) { response.close(); - logger.debug("Submitted examine info for {} {}: {}", type, id, text); + log.debug("Submitted examine info for {} {}: {}", type, id, text); } }); } diff --git a/http-api/src/main/java/net/runelite/http/api/feed/FeedClient.java b/http-api/src/main/java/net/runelite/http/api/feed/FeedClient.java index bf4698315c..62cddfa599 100644 --- a/http-api/src/main/java/net/runelite/http/api/feed/FeedClient.java +++ b/http-api/src/main/java/net/runelite/http/api/feed/FeedClient.java @@ -28,34 +28,27 @@ import com.google.gson.JsonParseException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; -import javax.inject.Inject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import net.runelite.http.api.RuneLiteAPI; import okhttp3.HttpUrl; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +@Slf4j +@RequiredArgsConstructor public class FeedClient { - private static final Logger logger = LoggerFactory.getLogger(FeedClient.class); - private final OkHttpClient client; - @Inject - public FeedClient(OkHttpClient client) - { - this.client = client; - } - public FeedResult lookupFeed() throws IOException { HttpUrl url = RuneLiteAPI.getApiBase().newBuilder() .addPathSegment("feed.js") .build(); - logger.debug("Built URI: {}", url); + log.debug("Built URI: {}", url); Request request = new Request.Builder() .url(url) @@ -65,7 +58,7 @@ public class FeedClient { if (!response.isSuccessful()) { - logger.debug("Error looking up feed: {}", response); + log.debug("Error looking up feed: {}", response); return null; } diff --git a/http-api/src/main/java/net/runelite/http/api/ge/GrandExchangeClient.java b/http-api/src/main/java/net/runelite/http/api/ge/GrandExchangeClient.java index fd02f37ffc..1d898ccf27 100644 --- a/http-api/src/main/java/net/runelite/http/api/ge/GrandExchangeClient.java +++ b/http-api/src/main/java/net/runelite/http/api/ge/GrandExchangeClient.java @@ -27,6 +27,7 @@ package net.runelite.http.api.ge; import com.google.gson.Gson; import java.io.IOException; import java.util.UUID; +import lombok.RequiredArgsConstructor; import lombok.Setter; import lombok.extern.slf4j.Slf4j; import net.runelite.http.api.RuneLiteAPI; @@ -34,15 +35,19 @@ import static net.runelite.http.api.RuneLiteAPI.JSON; import okhttp3.Call; import okhttp3.Callback; import okhttp3.HttpUrl; +import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; @Slf4j +@RequiredArgsConstructor public class GrandExchangeClient { private static final Gson GSON = RuneLiteAPI.GSON; + private final OkHttpClient client; + @Setter private UUID uuid; @Setter @@ -69,7 +74,7 @@ public class GrandExchangeClient .url(url) .build(); - RuneLiteAPI.CLIENT.newCall(request).enqueue(new Callback() + client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) diff --git a/http-api/src/main/java/net/runelite/http/api/hiscore/HiscoreClient.java b/http-api/src/main/java/net/runelite/http/api/hiscore/HiscoreClient.java index a725089de4..2807f8f411 100644 --- a/http-api/src/main/java/net/runelite/http/api/hiscore/HiscoreClient.java +++ b/http-api/src/main/java/net/runelite/http/api/hiscore/HiscoreClient.java @@ -25,9 +25,10 @@ package net.runelite.http.api.hiscore; import java.io.IOException; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import net.runelite.http.api.RuneLiteAPI; import okhttp3.HttpUrl; +import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import org.apache.commons.csv.CSVFormat; @@ -35,8 +36,11 @@ import org.apache.commons.csv.CSVParser; import org.apache.commons.csv.CSVRecord; @Slf4j +@RequiredArgsConstructor public class HiscoreClient { + private final OkHttpClient client; + public HiscoreResult lookup(String username, HiscoreEndpoint endpoint) throws IOException { return lookup(username, endpoint.getHiscoreURL()); @@ -97,7 +101,7 @@ public class HiscoreClient String responseStr; - try (Response okresponse = RuneLiteAPI.CLIENT.newCall(okrequest).execute()) + try (Response okresponse = client.newCall(okrequest).execute()) { if (!okresponse.isSuccessful()) { diff --git a/http-api/src/main/java/net/runelite/http/api/item/ItemClient.java b/http-api/src/main/java/net/runelite/http/api/item/ItemClient.java index 0dea2d1eed..1b4df52de4 100644 --- a/http-api/src/main/java/net/runelite/http/api/item/ItemClient.java +++ b/http-api/src/main/java/net/runelite/http/api/item/ItemClient.java @@ -31,27 +31,20 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.lang.reflect.Type; import java.util.Map; -import javax.inject.Inject; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; import net.runelite.http.api.RuneLiteAPI; import okhttp3.HttpUrl; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +@Slf4j +@AllArgsConstructor public class ItemClient { - private static final Logger logger = LoggerFactory.getLogger(ItemClient.class); - private final OkHttpClient client; - @Inject - public ItemClient(OkHttpClient client) - { - this.client = client; - } - public ItemPrice[] getPrices() throws IOException { HttpUrl.Builder urlBuilder = RuneLiteAPI.getApiBase().newBuilder() @@ -60,7 +53,7 @@ public class ItemClient HttpUrl url = urlBuilder.build(); - logger.debug("Built URI: {}", url); + log.debug("Built URI: {}", url); Request request = new Request.Builder() .url(url) @@ -70,7 +63,7 @@ public class ItemClient { if (!response.isSuccessful()) { - logger.warn("Error looking up prices: {}", response); + log.warn("Error looking up prices: {}", response); return null; } @@ -92,7 +85,7 @@ public class ItemClient HttpUrl url = urlBuilder.build(); - logger.debug("Built URI: {}", url); + log.debug("Built URI: {}", url); Request request = new Request.Builder() .url(url) @@ -102,7 +95,7 @@ public class ItemClient { if (!response.isSuccessful()) { - logger.warn("Error looking up item stats: {}", response); + log.warn("Error looking up item stats: {}", response); return null; } diff --git a/http-api/src/main/java/net/runelite/http/api/loottracker/LootTrackerClient.java b/http-api/src/main/java/net/runelite/http/api/loottracker/LootTrackerClient.java index bc1b6de369..79351cfc90 100644 --- a/http-api/src/main/java/net/runelite/http/api/loottracker/LootTrackerClient.java +++ b/http-api/src/main/java/net/runelite/http/api/loottracker/LootTrackerClient.java @@ -41,6 +41,7 @@ import static net.runelite.http.api.RuneLiteAPI.JSON; import okhttp3.Call; import okhttp3.Callback; import okhttp3.HttpUrl; +import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; @@ -51,6 +52,7 @@ public class LootTrackerClient { private static final Gson GSON = RuneLiteAPI.GSON; + private final OkHttpClient client; private final UUID uuid; public CompletableFuture submit(Collection lootRecords) @@ -67,7 +69,7 @@ public class LootTrackerClient .url(url) .build(); - RuneLiteAPI.CLIENT.newCall(request).enqueue(new Callback() + client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) @@ -99,7 +101,7 @@ public class LootTrackerClient .url(url) .build(); - try (Response response = RuneLiteAPI.CLIENT.newCall(request).execute()) + try (Response response = client.newCall(request).execute()) { if (!response.isSuccessful()) { @@ -134,7 +136,7 @@ public class LootTrackerClient .url(builder.build()) .build(); - RuneLiteAPI.CLIENT.newCall(request).enqueue(new Callback() + client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) diff --git a/http-api/src/main/java/net/runelite/http/api/osbuddy/OSBGrandExchangeClient.java b/http-api/src/main/java/net/runelite/http/api/osbuddy/OSBGrandExchangeClient.java index c01337fdc0..3a832c7ccb 100644 --- a/http-api/src/main/java/net/runelite/http/api/osbuddy/OSBGrandExchangeClient.java +++ b/http-api/src/main/java/net/runelite/http/api/osbuddy/OSBGrandExchangeClient.java @@ -28,15 +28,20 @@ import com.google.gson.JsonParseException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import net.runelite.http.api.RuneLiteAPI; import okhttp3.HttpUrl; +import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; @Slf4j +@AllArgsConstructor public class OSBGrandExchangeClient { + private final OkHttpClient client; + public OSBGrandExchangeResult lookupItem(int itemId) throws IOException { final HttpUrl url = RuneLiteAPI.getApiBase().newBuilder() @@ -51,7 +56,7 @@ public class OSBGrandExchangeClient .url(url) .build(); - try (final Response response = RuneLiteAPI.CLIENT.newCall(request).execute()) + try (final Response response = client.newCall(request).execute()) { if (!response.isSuccessful()) { diff --git a/http-api/src/main/java/net/runelite/http/api/worlds/WorldClient.java b/http-api/src/main/java/net/runelite/http/api/worlds/WorldClient.java index b9d84eefd9..97063b8c0d 100644 --- a/http-api/src/main/java/net/runelite/http/api/worlds/WorldClient.java +++ b/http-api/src/main/java/net/runelite/http/api/worlds/WorldClient.java @@ -29,34 +29,27 @@ import com.google.gson.JsonParseException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; -import javax.inject.Inject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import net.runelite.http.api.RuneLiteAPI; import okhttp3.HttpUrl; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +@Slf4j +@RequiredArgsConstructor public class WorldClient { - private static final Logger logger = LoggerFactory.getLogger(WorldClient.class); - private final OkHttpClient client; - @Inject - public WorldClient(OkHttpClient client) - { - this.client = client; - } - public WorldResult lookupWorlds() throws IOException { HttpUrl url = RuneLiteAPI.getApiBase().newBuilder() .addPathSegment("worlds.js") .build(); - logger.debug("Built URI: {}", url); + log.debug("Built URI: {}", url); Request request = new Request.Builder() .url(url) @@ -66,7 +59,7 @@ public class WorldClient { if (!response.isSuccessful()) { - logger.debug("Error looking up worlds: {}", response); + log.debug("Error looking up worlds: {}", response); throw new IOException("unsuccessful response looking up worlds"); } diff --git a/http-api/src/main/java/net/runelite/http/api/xp/XpClient.java b/http-api/src/main/java/net/runelite/http/api/xp/XpClient.java index c45fe2e209..76acf6ad63 100644 --- a/http-api/src/main/java/net/runelite/http/api/xp/XpClient.java +++ b/http-api/src/main/java/net/runelite/http/api/xp/XpClient.java @@ -25,18 +25,24 @@ package net.runelite.http.api.xp; import java.io.IOException; +import lombok.extern.slf4j.Slf4j; import net.runelite.http.api.RuneLiteAPI; import okhttp3.Call; import okhttp3.Callback; import okhttp3.HttpUrl; +import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +@Slf4j public class XpClient { - private static final Logger logger = LoggerFactory.getLogger(XpClient.class); + private final OkHttpClient client; + + public XpClient(OkHttpClient client) + { + this.client = client; + } public void update(String username) { @@ -50,19 +56,19 @@ public class XpClient .url(url) .build(); - RuneLiteAPI.CLIENT.newCall(request).enqueue(new Callback() + client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { - logger.warn("Error submitting xp track", e); + log.warn("Error submitting xp track", e); } @Override public void onResponse(Call call, Response response) { response.close(); - logger.debug("Submitted xp track for {}", username); + log.debug("Submitted xp track for {}", username); } }); } diff --git a/http-api/src/main/java/net/runelite/http/api/xtea/XteaClient.java b/http-api/src/main/java/net/runelite/http/api/xtea/XteaClient.java index 42b10e3239..67a2e866ca 100644 --- a/http-api/src/main/java/net/runelite/http/api/xtea/XteaClient.java +++ b/http-api/src/main/java/net/runelite/http/api/xtea/XteaClient.java @@ -30,20 +30,23 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.List; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; import net.runelite.http.api.RuneLiteAPI; import static net.runelite.http.api.RuneLiteAPI.JSON; import okhttp3.Call; import okhttp3.Callback; import okhttp3.HttpUrl; +import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +@Slf4j +@AllArgsConstructor public class XteaClient { - private static final Logger logger = LoggerFactory.getLogger(XteaClient.class); + private final OkHttpClient client; public void submit(XteaRequest xteaRequest) { @@ -53,19 +56,19 @@ public class XteaClient .addPathSegment("xtea") .build(); - logger.debug("Built URI: {}", url); + log.debug("Built URI: {}", url); Request request = new Request.Builder() .post(RequestBody.create(JSON, json)) .url(url) .build(); - RuneLiteAPI.CLIENT.newCall(request).enqueue(new Callback() + client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { - logger.warn("unable to submit xtea keys", e); + log.warn("unable to submit xtea keys", e); } @Override @@ -75,7 +78,7 @@ public class XteaClient { if (!response.isSuccessful()) { - logger.debug("unsuccessful xtea response"); + log.debug("unsuccessful xtea response"); } } finally @@ -96,7 +99,7 @@ public class XteaClient .url(url) .build(); - try (Response response = RuneLiteAPI.CLIENT.newCall(request).execute()) + try (Response response = client.newCall(request).execute()) { InputStream in = response.body().byteStream(); // CHECKSTYLE:OFF @@ -120,7 +123,7 @@ public class XteaClient .url(url) .build(); - try (Response response = RuneLiteAPI.CLIENT.newCall(request).execute()) + try (Response response = client.newCall(request).execute()) { InputStream in = response.body().byteStream(); return RuneLiteAPI.GSON.fromJson(new InputStreamReader(in), XteaKey.class); diff --git a/http-service/src/main/java/net/runelite/http/service/hiscore/HiscoreService.java b/http-service/src/main/java/net/runelite/http/service/hiscore/HiscoreService.java index cc565b4444..fd73e17359 100644 --- a/http-service/src/main/java/net/runelite/http/service/hiscore/HiscoreService.java +++ b/http-service/src/main/java/net/runelite/http/service/hiscore/HiscoreService.java @@ -31,6 +31,7 @@ import com.google.common.cache.LoadingCache; import java.io.IOException; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; +import net.runelite.http.api.RuneLiteAPI; import net.runelite.http.api.hiscore.HiscoreClient; import net.runelite.http.api.hiscore.HiscoreEndpoint; import net.runelite.http.api.hiscore.HiscoreResult; @@ -40,7 +41,7 @@ import org.springframework.stereotype.Service; @Service public class HiscoreService { - private final HiscoreClient hiscoreClient = new HiscoreClient(); + private final HiscoreClient hiscoreClient = new HiscoreClient(RuneLiteAPI.CLIENT); private final LoadingCache hiscoreCache = CacheBuilder.newBuilder() .maximumSize(128) .expireAfterWrite(1, TimeUnit.MINUTES) diff --git a/runelite-client/src/main/java/net/runelite/client/ClientSessionManager.java b/runelite-client/src/main/java/net/runelite/client/ClientSessionManager.java index 5009bd509d..588a1ad006 100644 --- a/runelite-client/src/main/java/net/runelite/client/ClientSessionManager.java +++ b/runelite-client/src/main/java/net/runelite/client/ClientSessionManager.java @@ -38,23 +38,27 @@ import net.runelite.api.GameState; import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ClientShutdown; import net.runelite.client.util.RunnableExceptionLogger; +import okhttp3.OkHttpClient; @Singleton @Slf4j public class ClientSessionManager { - private final SessionClient sessionClient = new SessionClient(); private final ScheduledExecutorService executorService; private final Client client; + private final SessionClient sessionClient; private ScheduledFuture scheduledFuture; private UUID sessionId; @Inject - ClientSessionManager(ScheduledExecutorService executorService, @Nullable Client client) + ClientSessionManager(ScheduledExecutorService executorService, + @Nullable Client client, + OkHttpClient okHttpClient) { this.executorService = executorService; this.client = client; + this.sessionClient = new SessionClient(okHttpClient); } public void start() diff --git a/runelite-client/src/main/java/net/runelite/client/RuneLite.java b/runelite-client/src/main/java/net/runelite/client/RuneLite.java index c8cd6f352f..e9d79d1b5f 100644 --- a/runelite-client/src/main/java/net/runelite/client/RuneLite.java +++ b/runelite-client/src/main/java/net/runelite/client/RuneLite.java @@ -76,6 +76,9 @@ import net.runelite.client.ui.overlay.infobox.InfoBoxOverlay; import net.runelite.client.ui.overlay.tooltip.TooltipOverlay; import net.runelite.client.ui.overlay.worldmap.WorldMapOverlay; import net.runelite.client.ws.PartyService; +import net.runelite.http.api.RuneLiteAPI; +import okhttp3.Cache; +import okhttp3.OkHttpClient; import org.slf4j.LoggerFactory; @Singleton @@ -91,6 +94,8 @@ public class RuneLite public static final File DEFAULT_SESSION_FILE = new File(RUNELITE_DIR, "session"); public static final File DEFAULT_CONFIG_FILE = new File(RUNELITE_DIR, "settings.properties"); + private static final int MAX_OKHTTP_CACHE_SIZE = 20 * 1024 * 1024; // 20mb + @Getter private static Injector injector; @@ -178,6 +183,7 @@ public class RuneLite parser.accepts("developer-mode", "Enable developer tools"); parser.accepts("debug", "Show extra debugging output"); parser.accepts("safe-mode", "Disables external plugins and the GPU plugin"); + parser.accepts("insecure-skip-tls-verification", "Disables TLS verification"); final ArgumentAcceptingOptionSpec sessionfile = parser.accepts("sessionfile", "Use a specified session file") .withRequiredArg() @@ -227,12 +233,16 @@ public class RuneLite } }); + final OkHttpClient okHttpClient = RuneLiteAPI.CLIENT.newBuilder() + .cache(new Cache(new File(CACHE_DIR, "okhttp"), MAX_OKHTTP_CACHE_SIZE)) + .build(); + SplashScreen.init(); SplashScreen.stage(0, "Retrieving client", ""); try { - final ClientLoader clientLoader = new ClientLoader(options.valueOf(updateMode)); + final ClientLoader clientLoader = new ClientLoader(okHttpClient, options.valueOf(updateMode)); new Thread(() -> { @@ -265,6 +275,7 @@ public class RuneLite final long start = System.currentTimeMillis(); injector = Guice.createInjector(new RuneLiteModule( + okHttpClient, clientLoader, developerMode, options.has("safe-mode"), 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 c1489de882..517a7f83e0 100644 --- a/runelite-client/src/main/java/net/runelite/client/RuneLiteModule.java +++ b/runelite-client/src/main/java/net/runelite/client/RuneLiteModule.java @@ -50,15 +50,13 @@ import net.runelite.client.plugins.PluginManager; import net.runelite.client.task.Scheduler; import net.runelite.client.util.DeferredEventBus; import net.runelite.client.util.ExecutorServiceExceptionLogger; -import net.runelite.http.api.RuneLiteAPI; -import okhttp3.Cache; +import net.runelite.http.api.chat.ChatClient; import okhttp3.OkHttpClient; @AllArgsConstructor public class RuneLiteModule extends AbstractModule { - private static final int MAX_OKHTTP_CACHE_SIZE = 20 * 1024 * 1024; // 20mb - + private final OkHttpClient okHttpClient; private final Supplier clientLoader; private final boolean developerMode; private final boolean safeMode; @@ -73,9 +71,7 @@ public class RuneLiteModule extends AbstractModule bind(File.class).annotatedWith(Names.named("sessionfile")).toInstance(sessionfile); bind(File.class).annotatedWith(Names.named("config")).toInstance(config); bind(ScheduledExecutorService.class).toInstance(new ExecutorServiceExceptionLogger(Executors.newSingleThreadScheduledExecutor())); - bind(OkHttpClient.class).toInstance(RuneLiteAPI.CLIENT.newBuilder() - .cache(new Cache(new File(RuneLite.CACHE_DIR, "okhttp"), MAX_OKHTTP_CACHE_SIZE)) - .build()); + bind(OkHttpClient.class).toInstance(okHttpClient); bind(MenuManager.class); bind(ChatMessageManager.class); bind(ItemManager.class); @@ -120,4 +116,11 @@ public class RuneLiteModule extends AbstractModule { return configManager.getConfig(ChatColorConfig.class); } + + @Provides + @Singleton + ChatClient provideChatClient(OkHttpClient okHttpClient) + { + return new ChatClient(okHttpClient); + } } diff --git a/runelite-client/src/main/java/net/runelite/client/SessionClient.java b/runelite-client/src/main/java/net/runelite/client/SessionClient.java index ecfa96bafe..2aa8c7c3e3 100644 --- a/runelite-client/src/main/java/net/runelite/client/SessionClient.java +++ b/runelite-client/src/main/java/net/runelite/client/SessionClient.java @@ -29,15 +29,20 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.UUID; +import lombok.AllArgsConstructor; import net.runelite.http.api.RuneLiteAPI; import okhttp3.HttpUrl; +import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; import okhttp3.ResponseBody; +@AllArgsConstructor class SessionClient { + private final OkHttpClient okHttpClient; + UUID open() throws IOException { HttpUrl url = RuneLiteAPI.getSessionBase().newBuilder() @@ -48,7 +53,7 @@ class SessionClient .url(url) .build(); - try (Response response = RuneLiteAPI.CLIENT.newCall(request).execute()) + try (Response response = okHttpClient.newCall(request).execute()) { ResponseBody body = response.body(); @@ -74,7 +79,7 @@ class SessionClient .url(url) .build(); - try (Response response = RuneLiteAPI.CLIENT.newCall(request).execute()) + try (Response response = okHttpClient.newCall(request).execute()) { if (!response.isSuccessful()) { @@ -94,6 +99,6 @@ class SessionClient .url(url) .build(); - RuneLiteAPI.CLIENT.newCall(request).execute().close(); + okHttpClient.newCall(request).execute().close(); } } diff --git a/runelite-client/src/main/java/net/runelite/client/account/SessionManager.java b/runelite-client/src/main/java/net/runelite/client/account/SessionManager.java index a5c45f2591..3f754b5e40 100644 --- a/runelite-client/src/main/java/net/runelite/client/account/SessionManager.java +++ b/runelite-client/src/main/java/net/runelite/client/account/SessionManager.java @@ -47,6 +47,7 @@ import net.runelite.client.ws.WSClient; import net.runelite.http.api.account.AccountClient; import net.runelite.http.api.account.OAuthResponse; import net.runelite.http.api.ws.messages.LoginResponse; +import okhttp3.OkHttpClient; @Singleton @Slf4j @@ -59,18 +60,21 @@ public class SessionManager private final ConfigManager configManager; private final WSClient wsClient; private final File sessionFile; + private final AccountClient accountClient; @Inject private SessionManager( @Named("sessionfile") File sessionfile, ConfigManager configManager, EventBus eventBus, - WSClient wsClient) + WSClient wsClient, + OkHttpClient okHttpClient) { this.configManager = configManager; this.eventBus = eventBus; this.wsClient = wsClient; this.sessionFile = sessionfile; + this.accountClient = new AccountClient(okHttpClient); eventBus.register(this); } @@ -98,7 +102,7 @@ public class SessionManager } // Check if session is still valid - AccountClient accountClient = new AccountClient(session.getUuid()); + accountClient.setUuid(session.getUuid()); if (!accountClient.sessionCheck()) { log.debug("Loaded session {} is invalid", session.getUuid()); @@ -169,10 +173,10 @@ public class SessionManager log.debug("Logging out of account {}", accountSession.getUsername()); - AccountClient client = new AccountClient(accountSession.getUuid()); + accountClient.setUuid(accountSession.getUuid()); try { - client.logout(); + accountClient.logout(); } catch (IOException ex) { @@ -191,13 +195,13 @@ public class SessionManager { // If a session is already open, use that id. Otherwise generate a new id. UUID uuid = wsClient.getSessionId() != null ? wsClient.getSessionId() : UUID.randomUUID(); - AccountClient loginClient = new AccountClient(uuid); + accountClient.setUuid(uuid); final OAuthResponse login; try { - login = loginClient.login(); + login = accountClient.login(); } catch (IOException ex) { diff --git a/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java b/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java index e4cbdcc5b1..3842fd96a5 100644 --- a/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java +++ b/runelite-client/src/main/java/net/runelite/client/config/ConfigManager.java @@ -78,6 +78,7 @@ import net.runelite.client.util.ColorUtil; import net.runelite.http.api.config.ConfigClient; import net.runelite.http.api.config.ConfigEntry; import net.runelite.http.api.config.Configuration; +import okhttp3.OkHttpClient; @Singleton @Slf4j @@ -85,10 +86,9 @@ public class ConfigManager { private static final DateFormat TIME_FORMAT = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss"); - @Inject - EventBus eventBus; - - private final ScheduledExecutorService executor; + private final File settingsFileInput; + private final EventBus eventBus; + private final OkHttpClient okHttpClient; private AccountSession session; private ConfigClient client; @@ -97,18 +97,20 @@ public class ConfigManager private final ConfigInvocationHandler handler = new ConfigInvocationHandler(this); private final Properties properties = new Properties(); private final Map pendingChanges = new HashMap<>(); - private final File settingsFileInput; @Inject public ConfigManager( @Named("config") File config, - ScheduledExecutorService scheduledExecutorService) + ScheduledExecutorService scheduledExecutorService, + EventBus eventBus, + OkHttpClient okHttpClient) { - this.executor = scheduledExecutorService; this.settingsFileInput = config; + this.eventBus = eventBus; + this.okHttpClient = okHttpClient; this.propertiesFile = getPropertiesFile(); - executor.scheduleWithFixedDelay(this::sendConfig, 30, 30, TimeUnit.SECONDS); + scheduledExecutorService.scheduleWithFixedDelay(this::sendConfig, 30, 30, TimeUnit.SECONDS); } public final void switchSession(AccountSession session) @@ -124,7 +126,7 @@ public class ConfigManager else { this.session = session; - this.client = new ConfigClient(session.getUuid()); + this.client = new ConfigClient(okHttpClient, session.getUuid()); } this.propertiesFile = getPropertiesFile(); diff --git a/runelite-client/src/main/java/net/runelite/client/externalplugins/ExternalPluginManager.java b/runelite-client/src/main/java/net/runelite/client/externalplugins/ExternalPluginManager.java index b2175f3973..bd6baf39ac 100644 --- a/runelite-client/src/main/java/net/runelite/client/externalplugins/ExternalPluginManager.java +++ b/runelite-client/src/main/java/net/runelite/client/externalplugins/ExternalPluginManager.java @@ -64,8 +64,8 @@ import net.runelite.client.ui.SplashScreen; import net.runelite.client.util.CountingInputStream; import net.runelite.client.util.Text; import net.runelite.client.util.VerificationException; -import net.runelite.http.api.RuneLiteAPI; import okhttp3.HttpUrl; +import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; @@ -95,6 +95,9 @@ public class ExternalPluginManager @Inject private EventBus eventBus; + @Inject + private OkHttpClient okHttpClient; + public void loadExternalPlugins() throws PluginInstantiationException { refreshPlugins(); @@ -208,7 +211,7 @@ public class ExternalPluginManager .addPathSegment(manifest.getCommit() + ".jar") .build(); - try (Response res = RuneLiteAPI.CLIENT.newCall(new Request.Builder().url(url).build()).execute()) + try (Response res = okHttpClient.newCall(new Request.Builder().url(url).build()).execute()) { int fdownloaded = downloaded; downloaded += manifest.getSize(); diff --git a/runelite-client/src/main/java/net/runelite/client/game/HiscoreManager.java b/runelite-client/src/main/java/net/runelite/client/game/HiscoreManager.java index 060df7d785..9e05b20373 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/HiscoreManager.java +++ b/runelite-client/src/main/java/net/runelite/client/game/HiscoreManager.java @@ -33,11 +33,10 @@ import javax.inject.Inject; import javax.inject.Singleton; import lombok.AllArgsConstructor; import lombok.Data; -import net.runelite.api.Client; -import net.runelite.client.callback.ClientThread; import net.runelite.http.api.hiscore.HiscoreClient; import net.runelite.http.api.hiscore.HiscoreEndpoint; import net.runelite.http.api.hiscore.HiscoreResult; +import okhttp3.OkHttpClient; @Singleton public class HiscoreManager @@ -53,12 +52,13 @@ public class HiscoreManager static final HiscoreResult EMPTY = new HiscoreResult(); static final HiscoreResult NONE = new HiscoreResult(); - private final HiscoreClient hiscoreClient = new HiscoreClient(); private final LoadingCache hiscoreCache; + private final HiscoreClient hiscoreClient; @Inject - public HiscoreManager(Client client, ScheduledExecutorService executor, ClientThread clientThread) + public HiscoreManager(ScheduledExecutorService executor, OkHttpClient okHttpClient) { + hiscoreClient = new HiscoreClient(okHttpClient); hiscoreCache = CacheBuilder.newBuilder() .maximumSize(128L) .expireAfterWrite(1, TimeUnit.HOURS) diff --git a/runelite-client/src/main/java/net/runelite/client/game/ItemManager.java b/runelite-client/src/main/java/net/runelite/client/game/ItemManager.java index 015311a78b..9fcd1b4c98 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/ItemManager.java +++ b/runelite-client/src/main/java/net/runelite/client/game/ItemManager.java @@ -60,6 +60,7 @@ import net.runelite.client.util.AsyncBufferedImage; import net.runelite.http.api.item.ItemClient; import net.runelite.http.api.item.ItemPrice; import net.runelite.http.api.item.ItemStats; +import okhttp3.OkHttpClient; @Singleton @Slf4j @@ -82,10 +83,9 @@ public class ItemManager } private final Client client; - private final ScheduledExecutorService scheduledExecutorService; private final ClientThread clientThread; - private final ItemClient itemClient; + private Map itemPrices = Collections.emptyMap(); private Map itemStats = Collections.emptyMap(); private final LoadingCache itemImages; @@ -162,13 +162,12 @@ public class ItemManager build(); @Inject - public ItemManager(Client client, ScheduledExecutorService executor, ClientThread clientThread, - ItemClient itemClient) + public ItemManager(Client client, ScheduledExecutorService scheduledExecutorService, ClientThread clientThread, + OkHttpClient okHttpClient) { this.client = client; - this.scheduledExecutorService = executor; this.clientThread = clientThread; - this.itemClient = itemClient; + this.itemClient = new ItemClient(okHttpClient); scheduledExecutorService.scheduleWithFixedDelay(this::loadPrices, 0, 30, TimeUnit.MINUTES); scheduledExecutorService.submit(this::loadStats); diff --git a/runelite-client/src/main/java/net/runelite/client/game/WorldService.java b/runelite-client/src/main/java/net/runelite/client/game/WorldService.java index 263f712a25..4cc102016d 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/WorldService.java +++ b/runelite-client/src/main/java/net/runelite/client/game/WorldService.java @@ -43,6 +43,7 @@ import net.runelite.client.util.RunnableExceptionLogger; import net.runelite.http.api.worlds.World; import net.runelite.http.api.worlds.WorldClient; import net.runelite.http.api.worlds.WorldResult; +import okhttp3.OkHttpClient; @Singleton @Slf4j @@ -59,12 +60,12 @@ public class WorldService private WorldResult worlds; @Inject - private WorldService(Client client, ScheduledExecutorService scheduledExecutorService, WorldClient worldClient, + private WorldService(Client client, ScheduledExecutorService scheduledExecutorService, OkHttpClient okHttpClient, EventBus eventBus) { this.client = client; this.scheduledExecutorService = scheduledExecutorService; - this.worldClient = worldClient; + this.worldClient = new WorldClient(okHttpClient); this.eventBus = eventBus; scheduledExecutorService.scheduleWithFixedDelay(RunnableExceptionLogger.wrap(this::tick), 0, WORLD_FETCH_TIMER, TimeUnit.MINUTES); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java index 56b2435d02..4a8bbe2b13 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java @@ -80,6 +80,7 @@ import net.runelite.http.api.hiscore.HiscoreSkill; import net.runelite.http.api.hiscore.SingleHiscoreSkillResult; import net.runelite.http.api.hiscore.Skill; import net.runelite.http.api.item.ItemPrice; +import okhttp3.OkHttpClient; import org.apache.commons.text.WordUtils; @PluginDescriptor( @@ -128,8 +129,6 @@ public class ChatCommandsPlugin extends Plugin @VisibleForTesting static final int ADV_LOG_EXPLOITS_TEXT_INDEX = 1; - private final ChatClient chatClient = new ChatClient(); - private boolean bossLogLoaded; private boolean advLogLoaded; private boolean scrollInterfaceLoaded; @@ -168,6 +167,9 @@ public class ChatCommandsPlugin extends Plugin @Inject private HiscoreClient hiscoreClient; + @Inject + private ChatClient chatClient; + @Override public void startUp() { @@ -213,6 +215,12 @@ public class ChatCommandsPlugin extends Plugin return configManager.getConfig(ChatCommandsConfig.class); } + @Provides + HiscoreClient provideHiscoreClient(OkHttpClient okHttpClient) + { + return new HiscoreClient(okHttpClient); + } + private void setKc(String boss, int killcount) { configManager.setConfiguration("killcount." + client.getUsername().toLowerCase(), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordPlugin.java index 017f229dae..3593832fbb 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordPlugin.java @@ -43,7 +43,6 @@ import net.runelite.api.GameState; import net.runelite.api.Skill; import net.runelite.api.WorldType; import net.runelite.api.coords.WorldPoint; -import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.StatChanged; import net.runelite.api.events.VarbitChanged; @@ -54,6 +53,7 @@ import net.runelite.client.discord.events.DiscordJoinGame; import net.runelite.client.discord.events.DiscordJoinRequest; import net.runelite.client.discord.events.DiscordReady; import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.events.PartyChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -65,12 +65,12 @@ import net.runelite.client.util.LinkBrowser; import net.runelite.client.ws.PartyMember; import net.runelite.client.ws.PartyService; import net.runelite.client.ws.WSClient; -import net.runelite.http.api.RuneLiteAPI; import net.runelite.http.api.ws.messages.party.UserJoin; import net.runelite.http.api.ws.messages.party.UserPart; import net.runelite.http.api.ws.messages.party.UserSync; import okhttp3.Call; import okhttp3.Callback; +import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; @@ -103,6 +103,9 @@ public class DiscordPlugin extends Plugin @Inject private WSClient wsClient; + @Inject + private OkHttpClient okHttpClient; + private Map skillExp = new HashMap<>(); private NavigationButton discordButton; private boolean loginFlag; @@ -273,7 +276,7 @@ public class DiscordPlugin extends Plugin .url(url) .build(); - RuneLiteAPI.CLIENT.newCall(request).enqueue(new Callback() + okHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java index d301bab699..9292359d99 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java @@ -27,6 +27,7 @@ package net.runelite.client.plugins.examine; import com.google.common.annotations.VisibleForTesting; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; +import com.google.inject.Provides; import java.time.Instant; import java.util.ArrayDeque; import java.util.Deque; @@ -58,6 +59,7 @@ import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.util.QuantityFormatter; import net.runelite.client.util.Text; import net.runelite.http.api.examine.ExamineClient; +import okhttp3.OkHttpClient; /** * Submits examine info to the api @@ -91,6 +93,12 @@ public class ExaminePlugin extends Plugin @Inject private ChatMessageManager chatMessageManager; + @Provides + ExamineClient provideExamineClient(OkHttpClient okHttpClient) + { + return new ExamineClient(okHttpClient); + } + @Subscribe public void onGameStateChanged(GameStateChanged event) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/feed/FeedPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/feed/FeedPanel.java index acace3fe33..7b1d987c4e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/feed/FeedPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/feed/FeedPanel.java @@ -41,6 +41,8 @@ import java.time.Instant; import java.util.Comparator; import java.util.function.Supplier; import javax.imageio.ImageIO; +import javax.inject.Inject; +import javax.inject.Singleton; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.ImageIcon; @@ -55,17 +57,18 @@ import net.runelite.client.ui.FontManager; import net.runelite.client.ui.PluginPanel; import net.runelite.client.util.ImageUtil; import net.runelite.client.util.LinkBrowser; -import net.runelite.http.api.RuneLiteAPI; import net.runelite.http.api.feed.FeedItem; import net.runelite.http.api.feed.FeedItemType; import net.runelite.http.api.feed.FeedResult; import okhttp3.Call; import okhttp3.Callback; +import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import okhttp3.ResponseBody; @Slf4j +@Singleton class FeedPanel extends PluginPanel { private static final ImageIcon RUNELITE_ICON; @@ -104,12 +107,15 @@ class FeedPanel extends PluginPanel private final FeedConfig config; private final Supplier feedSupplier; + private final OkHttpClient okHttpClient; - FeedPanel(FeedConfig config, Supplier feedSupplier) + @Inject + FeedPanel(FeedConfig config, Supplier feedSupplier, OkHttpClient okHttpClient) { super(true); this.config = config; this.feedSupplier = feedSupplier; + this.okHttpClient = okHttpClient; setBorder(new EmptyBorder(10, 10, 10, 10)); setBackground(ColorScheme.DARK_GRAY_COLOR); @@ -158,7 +164,7 @@ class FeedPanel extends PluginPanel .url(item.getAvatar()) .build(); - RuneLiteAPI.CLIENT.newCall(request).enqueue(new Callback() + okHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/feed/FeedPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/feed/FeedPlugin.java index df48cf3a56..5da8e4b4c5 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/feed/FeedPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/feed/FeedPlugin.java @@ -25,7 +25,9 @@ package net.runelite.client.plugins.feed; import com.google.common.base.Suppliers; +import com.google.inject.Binder; import com.google.inject.Provides; +import com.google.inject.TypeLiteral; import java.awt.image.BufferedImage; import java.io.IOException; import java.time.temporal.ChronoUnit; @@ -34,9 +36,9 @@ import java.util.concurrent.TimeUnit; import java.util.function.Supplier; import javax.inject.Inject; import lombok.extern.slf4j.Slf4j; -import net.runelite.client.events.ConfigChanged; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.task.Schedule; @@ -45,6 +47,7 @@ import net.runelite.client.ui.NavigationButton; import net.runelite.client.util.ImageUtil; import net.runelite.http.api.feed.FeedClient; import net.runelite.http.api.feed.FeedResult; +import okhttp3.OkHttpClient; @PluginDescriptor( name = "News Feed", @@ -70,7 +73,7 @@ public class FeedPlugin extends Plugin private FeedPanel feedPanel; private NavigationButton navButton; - private Supplier feedSupplier = Suppliers.memoizeWithExpiration(() -> + private final Supplier feedSupplier = Suppliers.memoizeWithExpiration(() -> { try { @@ -83,10 +86,19 @@ public class FeedPlugin extends Plugin return null; }, 10, TimeUnit.MINUTES); + @Override + public void configure(Binder binder) + { + // CHECKSTYLE:OFF + binder.bind(new TypeLiteral>(){}) + .toInstance(feedSupplier); + // CHECKSTYLE:ON + } + @Override protected void startUp() throws Exception { - feedPanel = new FeedPanel(config, feedSupplier); + feedPanel = injector.getInstance(FeedPanel.class); final BufferedImage icon = ImageUtil.getResourceStreamFromClass(getClass(), "icon.png"); @@ -136,4 +148,10 @@ public class FeedPlugin extends Plugin { return configManager.getConfig(FeedConfig.class); } + + @Provides + FeedClient provideFeedClient(OkHttpClient okHttpClient) + { + return new FeedClient(okHttpClient); + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java index 47c3ef6480..8c3c04aea2 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java @@ -105,6 +105,7 @@ import net.runelite.http.api.item.ItemStats; import net.runelite.http.api.osbuddy.OSBGrandExchangeClient; import net.runelite.http.api.osbuddy.OSBGrandExchangeResult; import net.runelite.http.api.worlds.WorldType; +import okhttp3.OkHttpClient; import org.apache.commons.lang3.time.DurationFormatUtils; import org.apache.commons.text.similarity.FuzzyScore; @@ -119,7 +120,6 @@ public class GrandExchangePlugin extends Plugin private static final int GE_SLOTS = 8; private static final int OFFER_CONTAINER_ITEM = 21; private static final int OFFER_DEFAULT_ITEM_ID = 6512; - private static final OSBGrandExchangeClient CLIENT = new OSBGrandExchangeClient(); private static final String OSB_GE_TEXT = "
OSBuddy Actively traded price: "; private static final String BUY_LIMIT_GE_TEXT = "
Buy limit: "; @@ -190,6 +190,9 @@ public class GrandExchangePlugin extends Plugin private boolean loginBurstGeUpdates; private static String machineUuid; + @Inject + private OSBGrandExchangeClient osbGrandExchangeClient; + private boolean wasFuzzySearch; static @@ -291,6 +294,18 @@ public class GrandExchangePlugin extends Plugin return configManager.getConfig(GrandExchangeConfig.class); } + @Provides + OSBGrandExchangeClient provideOsbGrandExchangeClient(OkHttpClient okHttpClient) + { + return new OSBGrandExchangeClient(okHttpClient); + } + + @Provides + GrandExchangeClient provideGrandExchangeClient(OkHttpClient okHttpClient) + { + return new GrandExchangeClient(okHttpClient); + } + @Override protected void startUp() { @@ -902,7 +917,7 @@ public class GrandExchangePlugin extends Plugin { try { - final OSBGrandExchangeResult result = CLIENT.lookupItem(itemId); + final OSBGrandExchangeResult result = osbGrandExchangeClient.lookupItem(itemId); if (result != null && result.getOverall_average() > 0) { osbGrandExchangeResult = result; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePanel.java index 1a7333ecb1..1843e50c7b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePanel.java @@ -70,6 +70,7 @@ import net.runelite.http.api.hiscore.HiscoreSkill; import static net.runelite.http.api.hiscore.HiscoreSkill.*; import net.runelite.http.api.hiscore.HiscoreSkillType; import net.runelite.http.api.hiscore.Skill; +import okhttp3.OkHttpClient; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; @@ -118,15 +119,11 @@ public class HiscorePanel extends PluginPanel HiscoreEndpoint.NORMAL, HiscoreEndpoint.IRONMAN, HiscoreEndpoint.HARDCORE_IRONMAN, HiscoreEndpoint.ULTIMATE_IRONMAN, HiscoreEndpoint.DEADMAN, HiscoreEndpoint.TOURNAMENT }; - @Inject - ScheduledExecutorService executor; - - @Inject - @Nullable - private Client client; - + private final ScheduledExecutorService executor; + private final Client client; private final HiscoreConfig config; private final NameAutocompleter nameAutocompleter; + private final HiscoreClient hiscoreClient; private final IconTextField searchBar; @@ -136,10 +133,6 @@ public class HiscorePanel extends PluginPanel /* Container of all the selectable endpoints (ironman, deadman, etc) */ private final MaterialTabGroup tabGroup; - private final HiscoreClient hiscoreClient = new HiscoreClient(); - - private HiscoreResult result; - /* The currently selected endpoint */ private HiscoreEndpoint selectedEndPoint; @@ -147,11 +140,14 @@ public class HiscorePanel extends PluginPanel private boolean loading = false; @Inject - public HiscorePanel(HiscoreConfig config, NameAutocompleter nameAutocompleter) + public HiscorePanel(ScheduledExecutorService scheduledExecutorService, @Nullable Client client, + HiscoreConfig config, NameAutocompleter nameAutocompleter, OkHttpClient okHttpClient) { - super(); + this.executor = scheduledExecutorService; + this.client = client; this.config = config; this.nameAutocompleter = nameAutocompleter; + this.hiscoreClient = new HiscoreClient(okHttpClient); // The layout seems to be ignoring the top margin and only gives it // a 2-3 pixel margin, so I set the value to 18 to compensate @@ -405,6 +401,7 @@ public class HiscorePanel extends PluginPanel selectedEndPoint = HiscoreEndpoint.NORMAL; } + HiscoreResult result; try { log.debug("Hiscore endpoint " + selectedEndPoint.name() + " selected"); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java index d8da160419..6707251dd7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java @@ -111,6 +111,7 @@ import net.runelite.http.api.loottracker.LootAggregate; import net.runelite.http.api.loottracker.LootRecord; import net.runelite.http.api.loottracker.LootRecordType; import net.runelite.http.api.loottracker.LootTrackerClient; +import okhttp3.OkHttpClient; import org.apache.commons.text.WordUtils; @PluginDescriptor( @@ -234,6 +235,9 @@ public class LootTrackerPlugin extends Plugin @Inject private LootManager lootManager; + @Inject + private OkHttpClient okHttpClient; + private LootTrackerPanel panel; private NavigationButton navButton; @VisibleForTesting @@ -293,7 +297,7 @@ public class LootTrackerPlugin extends Plugin AccountSession accountSession = sessionManager.getAccountSession(); if (accountSession.getUuid() != null) { - lootTrackerClient = new LootTrackerClient(accountSession.getUuid()); + lootTrackerClient = new LootTrackerClient(okHttpClient, accountSession.getUuid()); } else { @@ -341,7 +345,7 @@ public class LootTrackerPlugin extends Plugin AccountSession accountSession = sessionManager.getAccountSession(); if (accountSession != null) { - lootTrackerClient = new LootTrackerClient(accountSession.getUuid()); + lootTrackerClient = new LootTrackerClient(okHttpClient, accountSession.getUuid()); clientThread.invokeLater(() -> { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java index fb6b67450c..7fbae8fc3b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java @@ -90,9 +90,9 @@ import net.runelite.client.plugins.raids.solver.Layout; import net.runelite.client.plugins.raids.solver.LayoutSolver; import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; -import net.runelite.client.util.QuantityFormatter; import net.runelite.client.util.HotkeyListener; import net.runelite.client.util.ImageCapture; +import net.runelite.client.util.QuantityFormatter; import net.runelite.client.util.Text; import static net.runelite.client.util.Text.sanitize; import net.runelite.client.ws.PartyMember; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java index c8c02a8bf3..6b8ade7b65 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java @@ -243,7 +243,7 @@ public class SlayerPlugin extends Plugin } @Provides - SlayerConfig getConfig(ConfigManager configManager) + SlayerConfig provideSlayerConfig(ConfigManager configManager) { return configManager.getConfig(SlayerConfig.class); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/wiki/WikiSearchChatboxTextInput.java b/runelite-client/src/main/java/net/runelite/client/plugins/wiki/WikiSearchChatboxTextInput.java index ef3b91f9a0..c4eee8374f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/wiki/WikiSearchChatboxTextInput.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/wiki/WikiSearchChatboxTextInput.java @@ -49,10 +49,10 @@ import net.runelite.client.callback.ClientThread; import net.runelite.client.game.chatbox.ChatboxPanelManager; import net.runelite.client.game.chatbox.ChatboxTextInput; import net.runelite.client.util.LinkBrowser; -import net.runelite.http.api.RuneLiteAPI; import okhttp3.Call; import okhttp3.Callback; import okhttp3.HttpUrl; +import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; @@ -66,6 +66,7 @@ public class WikiSearchChatboxTextInput extends ChatboxTextInput private static final int PREDICTION_DEBOUNCE_DELAY_MS = 200; private final ChatboxPanelManager chatboxPanelManager; + private final OkHttpClient okHttpClient; private final Gson gson = new Gson(); private Future runningRequest = null; @@ -76,10 +77,12 @@ public class WikiSearchChatboxTextInput extends ChatboxTextInput @Inject public WikiSearchChatboxTextInput(ChatboxPanelManager chatboxPanelManager, ClientThread clientThread, - ScheduledExecutorService scheduledExecutorService, @Named("developerMode") final boolean developerMode) + ScheduledExecutorService scheduledExecutorService, @Named("developerMode") final boolean developerMode, + OkHttpClient okHttpClient) { super(chatboxPanelManager, clientThread); this.chatboxPanelManager = chatboxPanelManager; + this.okHttpClient = okHttpClient; lines(1); prompt("OSRS Wiki Search"); @@ -122,7 +125,7 @@ public class WikiSearchChatboxTextInput extends ChatboxTextInput .url(url) .build(); - RuneLiteAPI.CLIENT.newCall(req).enqueue(new Callback() + okHttpClient.newCall(req).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerPlugin.java index 9431eaf5a1..a13fba8575 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerPlugin.java @@ -73,6 +73,7 @@ import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.util.ImageUtil; import net.runelite.client.util.Text; import net.runelite.http.api.xp.XpClient; +import okhttp3.OkHttpClient; @PluginDescriptor( name = "XP Tracker", @@ -116,6 +117,9 @@ public class XpTrackerPlugin extends Plugin @Inject private OverlayManager overlayManager; + @Inject + private XpClient xpClient; + private NavigationButton navButton; @Setter(AccessLevel.PACKAGE) @VisibleForTesting @@ -127,7 +131,6 @@ public class XpTrackerPlugin extends Plugin private long lastXp = 0; private boolean initializeTracker; - private final XpClient xpClient = new XpClient(); private final XpState xpState = new XpState(); private final XpPauseState xpPauseState = new XpPauseState(); @@ -137,6 +140,12 @@ public class XpTrackerPlugin extends Plugin return configManager.getConfig(XpTrackerConfig.class); } + @Provides + XpClient provideXpClient(OkHttpClient okHttpClient) + { + return new XpClient(okHttpClient); + } + @Override public void configure(Binder binder) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xpupdater/XpUpdaterPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/xpupdater/XpUpdaterPlugin.java index 30b2c12dc1..6f86e0006e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xpupdater/XpUpdaterPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xpupdater/XpUpdaterPlugin.java @@ -26,10 +26,10 @@ */ package net.runelite.client.plugins.xpupdater; +import com.google.inject.Provides; import java.io.IOException; import java.util.Objects; import javax.inject.Inject; -import com.google.inject.Provides; import lombok.extern.slf4j.Slf4j; import net.runelite.api.Client; import net.runelite.api.GameState; @@ -40,11 +40,11 @@ import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.Subscribe; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.http.api.RuneLiteAPI; import okhttp3.Call; import okhttp3.Callback; import okhttp3.FormBody; import okhttp3.HttpUrl; +import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; @@ -66,13 +66,16 @@ public class XpUpdaterPlugin extends Plugin @Inject private Client client; + @Inject + private XpUpdaterConfig config; + + @Inject + private OkHttpClient okHttpClient; + private String lastUsername; private boolean fetchXp; private long lastXp; - @Inject - private XpUpdaterConfig config; - @Provides XpUpdaterConfig getConfig(ConfigManager configManager) { @@ -191,9 +194,9 @@ public class XpUpdaterPlugin extends Plugin } } - private static void sendRequest(String platform, Request request) + private void sendRequest(String platform, Request request) { - RuneLiteAPI.CLIENT.newCall(request).enqueue(new Callback() + okHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xtea/XteaPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/xtea/XteaPlugin.java index 3393974613..4eae636114 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xtea/XteaPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xtea/XteaPlugin.java @@ -24,6 +24,7 @@ */ package net.runelite.client.plugins.xtea; +import com.google.inject.Provides; import java.util.HashSet; import java.util.Set; import javax.inject.Inject; @@ -37,6 +38,7 @@ import net.runelite.client.plugins.PluginDescriptor; import net.runelite.http.api.xtea.XteaClient; import net.runelite.http.api.xtea.XteaKey; import net.runelite.http.api.xtea.XteaRequest; +import okhttp3.OkHttpClient; @PluginDescriptor( name = "Xtea", @@ -45,13 +47,20 @@ import net.runelite.http.api.xtea.XteaRequest; @Slf4j public class XteaPlugin extends Plugin { - private final XteaClient xteaClient = new XteaClient(); - private final Set sentRegions = new HashSet<>(); @Inject private Client client; + @Inject + private XteaClient xteaClient; + + @Provides + XteaClient provideXteaClient(OkHttpClient okHttpClient) + { + return new XteaClient(okHttpClient); + } + @Subscribe public void onGameStateChanged(GameStateChanged gameStateChanged) { diff --git a/runelite-client/src/main/java/net/runelite/client/rs/ClientConfigLoader.java b/runelite-client/src/main/java/net/runelite/client/rs/ClientConfigLoader.java index 19c612bd0e..0dbf77b87e 100644 --- a/runelite-client/src/main/java/net/runelite/client/rs/ClientConfigLoader.java +++ b/runelite-client/src/main/java/net/runelite/client/rs/ClientConfigLoader.java @@ -28,18 +28,18 @@ package net.runelite.client.rs; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; -import net.runelite.http.api.RuneLiteAPI; +import lombok.AllArgsConstructor; import okhttp3.HttpUrl; +import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; +@AllArgsConstructor class ClientConfigLoader { - private ClientConfigLoader() - { - } + private final OkHttpClient okHttpClient; - static RSConfig fetch(HttpUrl url) throws IOException + RSConfig fetch(HttpUrl url) throws IOException { final Request request = new Request.Builder() .url(url) @@ -47,7 +47,7 @@ class ClientConfigLoader final RSConfig config = new RSConfig(); - try (final Response response = RuneLiteAPI.CLIENT.newCall(request).execute()) + try (final Response response = okHttpClient.newCall(request).execute()) { if (!response.isSuccessful()) { diff --git a/runelite-client/src/main/java/net/runelite/client/rs/ClientLoader.java b/runelite-client/src/main/java/net/runelite/client/rs/ClientLoader.java index d06a55a499..6128c4474b 100644 --- a/runelite-client/src/main/java/net/runelite/client/rs/ClientLoader.java +++ b/runelite-client/src/main/java/net/runelite/client/rs/ClientLoader.java @@ -68,9 +68,9 @@ import net.runelite.client.ui.FatalErrorDialog; import net.runelite.client.ui.SplashScreen; import net.runelite.client.util.CountingInputStream; import net.runelite.client.util.VerificationException; -import net.runelite.http.api.RuneLiteAPI; import net.runelite.http.api.worlds.World; import okhttp3.HttpUrl; +import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; @@ -83,14 +83,19 @@ public class ClientLoader implements Supplier private static File VANILLA_CACHE = new File(RuneLite.CACHE_DIR, "vanilla.cache"); private static File PATCHED_CACHE = new File(RuneLite.CACHE_DIR, "patched.cache"); + private final OkHttpClient okHttpClient; + private final ClientConfigLoader clientConfigLoader; private ClientUpdateCheckMode updateCheckMode; - private Object client = null; + private final WorldSupplier worldSupplier; - private WorldSupplier worldSupplier = new WorldSupplier(); + private Object client; - public ClientLoader(ClientUpdateCheckMode updateCheckMode) + public ClientLoader(OkHttpClient okHttpClient, ClientUpdateCheckMode updateCheckMode) { + this.okHttpClient = okHttpClient; + this.clientConfigLoader = new ClientConfigLoader(okHttpClient); this.updateCheckMode = updateCheckMode; + this.worldSupplier = new WorldSupplier(okHttpClient); } @Override @@ -187,7 +192,7 @@ public class ClientLoader implements Supplier { try { - RSConfig config = ClientConfigLoader.fetch(url); + RSConfig config = clientConfigLoader.fetch(url); if (Strings.isNullOrEmpty(config.getCodeBase()) || Strings.isNullOrEmpty(config.getInitialJar()) || Strings.isNullOrEmpty(config.getInitialClass())) { @@ -221,7 +226,7 @@ public class ClientLoader implements Supplier @Nonnull private RSConfig downloadFallbackConfig() throws IOException { - RSConfig backupConfig = ClientConfigLoader.fetch(HttpUrl.parse(RuneLiteProperties.getJavConfigBackup())); + RSConfig backupConfig = clientConfigLoader.fetch(HttpUrl.parse(RuneLiteProperties.getJavConfigBackup())); if (Strings.isNullOrEmpty(backupConfig.getCodeBase()) || Strings.isNullOrEmpty(backupConfig.getInitialJar()) || Strings.isNullOrEmpty(backupConfig.getInitialClass())) { @@ -298,7 +303,7 @@ public class ClientLoader implements Supplier .url(url) .build(); - try (Response response = RuneLiteAPI.CLIENT.newCall(request).execute()) + try (Response response = okHttpClient.newCall(request).execute()) { // Its important to not close the response manually - this should be the only close or // try-with-resources on this stream or it's children diff --git a/runelite-client/src/main/java/net/runelite/client/rs/WorldSupplier.java b/runelite-client/src/main/java/net/runelite/client/rs/WorldSupplier.java index 6e143b1326..16cf8141ad 100644 --- a/runelite-client/src/main/java/net/runelite/client/rs/WorldSupplier.java +++ b/runelite-client/src/main/java/net/runelite/client/rs/WorldSupplier.java @@ -33,15 +33,18 @@ import java.util.Queue; import java.util.Random; import java.util.function.Supplier; import java.util.stream.Collectors; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import net.runelite.http.api.RuneLiteAPI; import net.runelite.http.api.worlds.World; import net.runelite.http.api.worlds.WorldClient; import net.runelite.http.api.worlds.WorldType; +import okhttp3.OkHttpClient; @Slf4j +@RequiredArgsConstructor class WorldSupplier implements Supplier { + private final OkHttpClient okHttpClient; private final Random random = new Random(System.nanoTime()); private Queue worlds = new ArrayDeque<>(); @@ -55,7 +58,7 @@ class WorldSupplier implements Supplier try { - List newWorlds = new WorldClient(RuneLiteAPI.CLIENT) + List newWorlds = new WorldClient(okHttpClient) .lookupWorlds() .getWorlds() .stream() diff --git a/runelite-client/src/main/java/net/runelite/client/util/ImageCapture.java b/runelite-client/src/main/java/net/runelite/client/util/ImageCapture.java index a07e0240bb..1823ca734c 100644 --- a/runelite-client/src/main/java/net/runelite/client/util/ImageCapture.java +++ b/runelite-client/src/main/java/net/runelite/client/util/ImageCapture.java @@ -58,6 +58,7 @@ import okhttp3.Call; import okhttp3.Callback; import okhttp3.HttpUrl; import okhttp3.MediaType; +import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; @@ -76,6 +77,9 @@ public class ImageCapture @Inject private Notifier notifier; + @Inject + private OkHttpClient okHttpClient; + /** * Saves a screenshot of the client window to the screenshot folder as a PNG, * and optionally uploads it to an image-hosting service. @@ -197,7 +201,7 @@ public class ImageCapture .post(RequestBody.create(JSON, json)) .build(); - RuneLiteAPI.CLIENT.newCall(request).enqueue(new Callback() + okHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException ex) diff --git a/runelite-client/src/main/java/net/runelite/client/ws/WSClient.java b/runelite-client/src/main/java/net/runelite/client/ws/WSClient.java index 5b92f5c533..a2f5f7b9e0 100644 --- a/runelite-client/src/main/java/net/runelite/client/ws/WSClient.java +++ b/runelite-client/src/main/java/net/runelite/client/ws/WSClient.java @@ -40,6 +40,7 @@ import net.runelite.http.api.ws.WebsocketGsonFactory; import net.runelite.http.api.ws.WebsocketMessage; import net.runelite.http.api.ws.messages.Handshake; import net.runelite.http.api.ws.messages.party.PartyMessage; +import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import okhttp3.WebSocket; @@ -50,6 +51,7 @@ import okhttp3.WebSocketListener; public class WSClient extends WebSocketListener implements AutoCloseable { private final EventBus eventBus; + private final OkHttpClient okHttpClient; private final Collection> messages = new HashSet<>(); private volatile Gson gson; @@ -58,9 +60,10 @@ public class WSClient extends WebSocketListener implements AutoCloseable private WebSocket webSocket; @Inject - private WSClient(EventBus eventBus) + private WSClient(EventBus eventBus, OkHttpClient okHttpClient) { this.eventBus = eventBus; + this.okHttpClient = okHttpClient; this.gson = WebsocketGsonFactory.build(WebsocketGsonFactory.factory(messages)); } @@ -101,7 +104,7 @@ public class WSClient extends WebSocketListener implements AutoCloseable .url(RuneLiteAPI.getWsEndpoint()) .build(); - webSocket = RuneLiteAPI.CLIENT.newWebSocket(request, this); + webSocket = okHttpClient.newWebSocket(request, this); Handshake handshake = new Handshake(); handshake.setSession(sessionId); diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/PluginManagerTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/PluginManagerTest.java index 003e43361d..2ca7409b8d 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/PluginManagerTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/PluginManagerTest.java @@ -51,13 +51,18 @@ import net.runelite.client.RuneLiteModule; import net.runelite.client.config.Config; import net.runelite.client.config.ConfigItem; import net.runelite.client.eventbus.EventBus; +import okhttp3.OkHttpClient; +import okhttp3.Request; import static org.junit.Assert.assertEquals; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; import org.junit.runner.RunWith; +import static org.mockito.ArgumentMatchers.any; import org.mockito.Mock; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; import org.mockito.junit.MockitoJUnitRunner; @RunWith(MockitoJUnitRunner.class) @@ -76,14 +81,18 @@ public class PluginManagerTest @Bind public Client client; - private Set pluginClasses; - private Set configClasses; + private Set> pluginClasses; + private Set> configClasses; @Before public void before() throws IOException { + OkHttpClient okHttpClient = mock(OkHttpClient.class); + when(okHttpClient.newCall(any(Request.class))) + .thenThrow(new RuntimeException("in plugin manager test")); + Injector injector = Guice.createInjector(Modules - .override(new RuneLiteModule(() -> null, true, false, + .override(new RuneLiteModule(okHttpClient, () -> null, true, false, RuneLite.DEFAULT_SESSION_FILE, RuneLite.DEFAULT_CONFIG_FILE)) .with(BoundFieldModule.of(this))); @@ -119,7 +128,7 @@ public class PluginManagerTest pluginManager.loadCorePlugins(); Collection plugins = pluginManager.getPlugins(); long expected = pluginClasses.stream() - .map(cl -> (PluginDescriptor) cl.getAnnotation(PluginDescriptor.class)) + .map(cl -> cl.getAnnotation(PluginDescriptor.class)) .filter(Objects::nonNull) .filter(PluginDescriptor::loadWhenOutdated) .count(); @@ -134,7 +143,7 @@ public class PluginManagerTest plugins.forEach(eventBus::register); expected = pluginClasses.stream() - .map(cl -> (PluginDescriptor) cl.getAnnotation(PluginDescriptor.class)) + .map(cl -> cl.getAnnotation(PluginDescriptor.class)) .filter(Objects::nonNull) .filter(pd -> !pd.developerPlugin()) .count(); @@ -146,16 +155,13 @@ public class PluginManagerTest { List modules = new ArrayList<>(); modules.add(new GraphvizModule()); - modules.add(new RuneLiteModule(() -> null, true, false, + modules.add(new RuneLiteModule(mock(OkHttpClient.class), () -> null, true, false, RuneLite.DEFAULT_SESSION_FILE, RuneLite.DEFAULT_CONFIG_FILE)); PluginManager pluginManager = new PluginManager(true, false, null, null, null, null, null); pluginManager.loadCorePlugins(); - for (Plugin p : pluginManager.getPlugins()) - { - modules.add(p); - } + modules.addAll(pluginManager.getPlugins()); File file = folder.newFile(); try (PrintWriter out = new PrintWriter(file, "UTF-8")) @@ -171,7 +177,7 @@ public class PluginManagerTest @Test public void ensureNoDuplicateConfigKeyNames() { - for (final Class clazz : configClasses) + for (final Class clazz : configClasses) { final Set configKeyNames = new HashSet<>(); diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/chatcommands/ChatCommandsPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/chatcommands/ChatCommandsPluginTest.java index 97c40c0cc3..c2fab2bd0e 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/chatcommands/ChatCommandsPluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/chatcommands/ChatCommandsPluginTest.java @@ -49,6 +49,7 @@ import net.runelite.client.chat.ChatCommandManager; import net.runelite.client.chat.ChatMessageManager; import net.runelite.client.config.ChatColorConfig; import net.runelite.client.config.ConfigManager; +import net.runelite.http.api.chat.ChatClient; import net.runelite.http.api.hiscore.HiscoreClient; import net.runelite.http.api.hiscore.HiscoreSkill; import net.runelite.http.api.hiscore.SingleHiscoreSkillResult; @@ -103,6 +104,10 @@ public class ChatCommandsPluginTest @Bind ChatMessageManager chatMessageManager; + @Mock + @Bind + ChatClient chatClient; + @Mock @Bind ChatCommandsConfig chatCommandsConfig; diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/grandexchange/GrandExchangePluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/grandexchange/GrandExchangePluginTest.java index 0c3dc00d04..9eb1f22342 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/grandexchange/GrandExchangePluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/grandexchange/GrandExchangePluginTest.java @@ -50,6 +50,7 @@ import static net.runelite.client.plugins.grandexchange.GrandExchangePlugin.find import static net.runelite.http.api.RuneLiteAPI.GSON; import net.runelite.http.api.ge.GrandExchangeClient; import net.runelite.http.api.ge.GrandExchangeTrade; +import net.runelite.http.api.osbuddy.OSBGrandExchangeClient; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import org.junit.Before; @@ -108,6 +109,10 @@ public class GrandExchangePluginTest @Bind private GrandExchangeClient grandExchangeClient; + @Mock + @Bind + private OSBGrandExchangeClient osbGrandExchangeClient; + @Mock @Bind private Client client; diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/hiscore/HiscorePanelTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/hiscore/HiscorePanelTest.java index dfee0deeba..ae2f63144b 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/hiscore/HiscorePanelTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/hiscore/HiscorePanelTest.java @@ -24,7 +24,9 @@ */ package net.runelite.client.plugins.hiscore; +import java.util.concurrent.ScheduledExecutorService; import static net.runelite.client.plugins.hiscore.HiscorePanel.formatLevel; +import okhttp3.OkHttpClient; import static org.junit.Assert.assertEquals; import org.junit.Test; import static org.mockito.Mockito.mock; @@ -34,7 +36,7 @@ public class HiscorePanelTest @Test public void testConstructor() { - new HiscorePanel(mock(HiscoreConfig.class), mock(NameAutocompleter.class)); + new HiscorePanel(mock(ScheduledExecutorService.class), null, mock(HiscoreConfig.class), mock(NameAutocompleter.class), mock(OkHttpClient.class)); } @Test diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/raids/RaidsPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/raids/RaidsPluginTest.java index dc03a3e556..3bb07bf9a3 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/raids/RaidsPluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/raids/RaidsPluginTest.java @@ -45,6 +45,7 @@ import net.runelite.client.game.ItemManager; import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.util.ImageCapture; import net.runelite.client.ws.PartyService; +import net.runelite.http.api.chat.ChatClient; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -93,6 +94,10 @@ public class RaidsPluginTest @Bind Notifier notifier; + @Mock + @Bind + ChatClient chatClient; + @Mock @Bind RaidsConfig raidsConfig; diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/xptracker/XpTrackerPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/xptracker/XpTrackerPluginTest.java index ca3375bbf4..64a1cec8e6 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/xptracker/XpTrackerPluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/xptracker/XpTrackerPluginTest.java @@ -39,6 +39,7 @@ import net.runelite.client.game.NPCManager; import net.runelite.client.game.SkillIconManager; import net.runelite.client.ui.ClientToolbar; import net.runelite.client.ui.overlay.OverlayManager; +import net.runelite.http.api.xp.XpClient; import static org.junit.Assert.assertEquals; import org.junit.Before; import org.junit.Test; @@ -70,6 +71,10 @@ public class XpTrackerPluginTest @Bind private XpTrackerConfig xpTrackerConfig; + @Mock + @Bind + private XpClient xpClient; + @Mock @Bind private NPCManager npcManager; diff --git a/runelite-client/src/test/java/net/runelite/client/rs/ClientConfigLoaderTest.java b/runelite-client/src/test/java/net/runelite/client/rs/ClientConfigLoaderTest.java index c2c3d3a87e..6ee1ecdf33 100644 --- a/runelite-client/src/test/java/net/runelite/client/rs/ClientConfigLoaderTest.java +++ b/runelite-client/src/test/java/net/runelite/client/rs/ClientConfigLoaderTest.java @@ -29,6 +29,7 @@ import com.google.common.io.CharStreams; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import okhttp3.OkHttpClient; import okhttp3.mockwebserver.MockResponse; import okhttp3.mockwebserver.MockWebServer; import org.junit.After; @@ -63,7 +64,7 @@ public class ClientConfigLoaderTest @Test public void testFetch() throws IOException { - final RSConfig config = ClientConfigLoader.fetch(server.url("/")); + final RSConfig config = new ClientConfigLoader(new OkHttpClient()).fetch(server.url("/")); assertEquals("http://oldschool1.runescape.com/", config.getCodeBase()); }