From 1db9d7352cc4488314482ded071994a3d49560d4 Mon Sep 17 00:00:00 2001 From: Owain van Brakel Date: Fri, 19 Jul 2019 01:35:42 +0200 Subject: [PATCH] http-api: RxJava async calls --- http-api/pom.xml | 5 ++ .../api/osbuddy/OSBGrandExchangeClient.java | 36 +++++---- .../chatcommands/ChatCommandsPlugin.java | 81 +++++++++---------- .../client/plugins/examine/ExaminePlugin.java | 67 ++++++++------- .../grandexchange/GrandExchangePlugin.java | 25 +++--- 5 files changed, 109 insertions(+), 105 deletions(-) diff --git a/http-api/pom.xml b/http-api/pom.xml index b23c17e47d..d9422499e7 100644 --- a/http-api/pom.xml +++ b/http-api/pom.xml @@ -79,6 +79,11 @@ com.squareup.okhttp3 mockwebserver + + io.reactivex.rxjava2 + rxjava + 2.2.10 + 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..3c187552fc 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 @@ -25,6 +25,7 @@ package net.runelite.http.api.osbuddy; import com.google.gson.JsonParseException; +import io.reactivex.Observable; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; @@ -37,7 +38,7 @@ import okhttp3.Response; @Slf4j public class OSBGrandExchangeClient { - public OSBGrandExchangeResult lookupItem(int itemId) throws IOException + public Observable lookupItem(int itemId) { final HttpUrl url = RuneLiteAPI.getApiBase().newBuilder() .addPathSegment("osb") @@ -47,23 +48,26 @@ public class OSBGrandExchangeClient log.debug("Built URI: {}", url); - final Request request = new Request.Builder() - .url(url) - .build(); - - try (final Response response = RuneLiteAPI.CLIENT.newCall(request).execute()) + return Observable.defer(() -> { - if (!response.isSuccessful()) + Request request = new Request.Builder() + .url(url) + .build(); + + try (final Response response = RuneLiteAPI.CLIENT.newCall(request).execute()) { - throw new IOException("Error looking up item id: " + response); - } + if (!response.isSuccessful()) + { + throw new IOException("Error looking up item id: " + response); + } - final InputStream in = response.body().byteStream(); - return RuneLiteAPI.GSON.fromJson(new InputStreamReader(in), OSBGrandExchangeResult.class); - } - catch (JsonParseException ex) - { - throw new IOException(ex); - } + final InputStream in = response.body().byteStream(); + return Observable.just(RuneLiteAPI.GSON.fromJson(new InputStreamReader(in), OSBGrandExchangeResult.class)); + } + catch (JsonParseException e) + { + return Observable.error(e); + } + }); } } 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 a17596f99c..521da25b34 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 @@ -25,15 +25,15 @@ */ package net.runelite.client.plugins.chatcommands; -import javax.inject.Singleton; -import net.runelite.api.vars.AccountType; import com.google.inject.Provides; +import io.reactivex.schedulers.Schedulers; import java.io.IOException; import java.util.List; import java.util.concurrent.ScheduledExecutorService; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.inject.Inject; +import javax.inject.Singleton; import lombok.Value; import lombok.extern.slf4j.Slf4j; import net.runelite.api.ChatMessageType; @@ -48,6 +48,7 @@ import net.runelite.api.events.ChatMessage; import net.runelite.api.events.GameTick; import net.runelite.api.events.VarbitChanged; import net.runelite.api.events.WidgetLoaded; +import net.runelite.api.vars.AccountType; import net.runelite.api.widgets.Widget; import static net.runelite.api.widgets.WidgetID.KILL_LOGS_GROUP_ID; import net.runelite.api.widgets.WidgetInfo; @@ -74,7 +75,6 @@ import net.runelite.http.api.hiscore.SingleHiscoreSkillResult; import net.runelite.http.api.hiscore.Skill; import net.runelite.http.api.item.ItemPrice; import net.runelite.http.api.osbuddy.OSBGrandExchangeClient; -import net.runelite.http.api.osbuddy.OSBGrandExchangeResult; import org.apache.commons.text.WordUtils; @PluginDescriptor( @@ -822,49 +822,46 @@ public class ChatCommandsPlugin extends Plugin if (!results.isEmpty()) { ItemPrice item = retrieveFromList(results, search); - OSBGrandExchangeResult osbresult = new OSBGrandExchangeResult(); - try - { - osbresult = CLIENT.lookupItem(item.getId()); - } - catch (IOException e) - { - log.error("Error looking up prices", e); - } + CLIENT.lookupItem(item.getId()) + .subscribeOn(Schedulers.single()) + .subscribe( + (osbresult) -> + { + int itemId = item.getId(); + int itemPrice = itemManager.getItemPrice(itemId); - int itemId = item.getId(); - int itemPrice = itemManager.getItemPrice(itemId); + final ChatMessageBuilder builder = new ChatMessageBuilder(); + builder.append(ChatColorType.NORMAL); + builder.append(ChatColorType.HIGHLIGHT); + builder.append(item.getName()); + builder.append(ChatColorType.NORMAL); + builder.append(": GE "); + builder.append(ChatColorType.HIGHLIGHT); + builder.append(StackFormatter.formatNumber(itemPrice)); + builder.append(ChatColorType.NORMAL); + builder.append(": OSB "); + builder.append(ChatColorType.HIGHLIGHT); + builder.append(StackFormatter.formatNumber(osbresult.getOverall_average())); - final ChatMessageBuilder builder = new ChatMessageBuilder(); - builder.append(ChatColorType.NORMAL); - builder.append(ChatColorType.HIGHLIGHT); - builder.append(item.getName()); - builder.append(ChatColorType.NORMAL); - builder.append(": GE "); - builder.append(ChatColorType.HIGHLIGHT); - builder.append(StackFormatter.formatNumber(itemPrice)); - builder.append(ChatColorType.NORMAL); - builder.append(": OSB "); - builder.append(ChatColorType.HIGHLIGHT); - builder.append(StackFormatter.formatNumber(osbresult.getOverall_average())); + ItemDefinition itemComposition = itemManager.getItemDefinition(itemId); + if (itemComposition != null) + { + int alchPrice = itemManager.getAlchValue(itemId); + builder + .append(ChatColorType.NORMAL) + .append(" HA value ") + .append(ChatColorType.HIGHLIGHT) + .append(StackFormatter.formatNumber(alchPrice)); + } - ItemDefinition itemComposition = itemManager.getItemDefinition(itemId); - if (itemComposition != null) - { - int alchPrice = itemManager.getAlchValue(itemId); - builder - .append(ChatColorType.NORMAL) - .append(" HA value ") - .append(ChatColorType.HIGHLIGHT) - .append(StackFormatter.formatNumber(alchPrice)); - } + String response = builder.build(); - String response = builder.build(); - - log.debug("Setting response {}", response); - messageNode.setRuneLiteFormatMessage(response); - chatMessageManager.update(messageNode); - client.refreshChat(); + log.debug("Setting response {}", response); + messageNode.setRuneLiteFormatMessage(response); + chatMessageManager.update(messageNode); + client.refreshChat(); + } + ); } } 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 8583cbe11a..f277e18464 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 @@ -26,7 +26,7 @@ package net.runelite.client.plugins.examine; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; -import java.io.IOException; +import io.reactivex.schedulers.Schedulers; import java.time.Instant; import java.util.ArrayDeque; import java.util.Deque; @@ -57,7 +57,6 @@ import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.util.StackFormatter; import net.runelite.http.api.examine.ExamineClient; import net.runelite.http.api.osbuddy.OSBGrandExchangeClient; -import net.runelite.http.api.osbuddy.OSBGrandExchangeResult; /** * Submits examine info to the api @@ -365,40 +364,40 @@ public class ExaminePlugin extends Plugin if (gePrice > 0) { - OSBGrandExchangeResult osbresult = new OSBGrandExchangeResult(); - try - { - osbresult = CLIENT.lookupItem(id); - } - catch (IOException e) - { - log.error(e.toString()); - } - message - .append(ChatColorType.NORMAL) - .append(" GE ") - .append(ChatColorType.HIGHLIGHT) - .append(StackFormatter.formatNumber(gePrice * quantity)); + int finalQuantity = quantity; + CLIENT.lookupItem(id) + .subscribeOn(Schedulers.single()) + .subscribe( + (osbresult) -> + { + message + .append(ChatColorType.NORMAL) + .append(" GE ") + .append(ChatColorType.HIGHLIGHT) + .append(StackFormatter.formatNumber(gePrice * finalQuantity)); - if (osbresult != null) - { - message - .append(ChatColorType.NORMAL) - .append(" OSB ") - .append(ChatColorType.HIGHLIGHT) - .append(StackFormatter.formatNumber(osbresult.getOverall_average() * quantity)); - } + if (osbresult != null) + { + message + .append(ChatColorType.NORMAL) + .append(" OSB ") + .append(ChatColorType.HIGHLIGHT) + .append(StackFormatter.formatNumber(osbresult.getOverall_average() * finalQuantity)); + } - if (quantity > 1) - { - message - .append(ChatColorType.NORMAL) - .append(" (") - .append(ChatColorType.HIGHLIGHT) - .append(StackFormatter.formatNumber(gePrice)) - .append(ChatColorType.NORMAL) - .append("ea)"); - } + if (finalQuantity > 1) + { + message + .append(ChatColorType.NORMAL) + .append(" (") + .append(ChatColorType.HIGHLIGHT) + .append(StackFormatter.formatNumber(gePrice)) + .append(ChatColorType.NORMAL) + .append("ea)"); + } + }, + (e) -> log.error(e.toString()) + ); } if (alchPrice > 0) 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 8314a1493d..5fa2e77a21 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 @@ -30,8 +30,8 @@ package net.runelite.client.plugins.grandexchange; import com.google.common.reflect.TypeToken; import com.google.gson.Gson; import com.google.inject.Provides; +import io.reactivex.schedulers.Schedulers; import java.awt.image.BufferedImage; -import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Map; @@ -58,8 +58,8 @@ import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; import net.runelite.api.events.GrandExchangeOfferChanged; import net.runelite.api.events.MenuEntryAdded; -import net.runelite.api.events.WidgetLoaded; import net.runelite.api.events.ScriptCallbackEvent; +import net.runelite.api.events.WidgetLoaded; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetID; import net.runelite.api.widgets.WidgetInfo; @@ -83,7 +83,6 @@ import net.runelite.client.util.Text; import net.runelite.http.api.ge.GrandExchangeClient; import net.runelite.http.api.ge.GrandExchangeTrade; import net.runelite.http.api.osbuddy.OSBGrandExchangeClient; -import net.runelite.http.api.osbuddy.OSBGrandExchangeResult; @PluginDescriptor( name = "Grand Exchange", @@ -547,16 +546,16 @@ public class GrandExchangePlugin extends Plugin return; } - try - { - final OSBGrandExchangeResult result = CLIENT.lookupItem(itemId); - final String text = geText.getText() + OSB_GE_TEXT + StackFormatter.formatNumber(result.getOverall_average()); - geText.setText(text); - } - catch (IOException e) - { - log.debug("Error getting price of item {}", itemId, e); - } + CLIENT.lookupItem(itemId) + .subscribeOn(Schedulers.single()) + .subscribe( + (osbresult) -> + { + final String text = geText.getText() + OSB_GE_TEXT + StackFormatter.formatNumber(osbresult.getOverall_average()); + geText.setText(text); + }, + (e) -> log.debug("Error getting price of item {}", itemId, e) + ); }); }