http-api: RxJava async calls

This commit is contained in:
Owain van Brakel
2019-07-19 01:35:42 +02:00
parent 0b107fab60
commit 1db9d7352c
5 changed files with 109 additions and 105 deletions

View File

@@ -79,6 +79,11 @@
<groupId>com.squareup.okhttp3</groupId> <groupId>com.squareup.okhttp3</groupId>
<artifactId>mockwebserver</artifactId> <artifactId>mockwebserver</artifactId>
</dependency> </dependency>
<dependency>
<groupId>io.reactivex.rxjava2</groupId>
<artifactId>rxjava</artifactId>
<version>2.2.10</version>
</dependency>
</dependencies> </dependencies>
<build> <build>

View File

@@ -25,6 +25,7 @@
package net.runelite.http.api.osbuddy; package net.runelite.http.api.osbuddy;
import com.google.gson.JsonParseException; import com.google.gson.JsonParseException;
import io.reactivex.Observable;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
@@ -37,7 +38,7 @@ import okhttp3.Response;
@Slf4j @Slf4j
public class OSBGrandExchangeClient public class OSBGrandExchangeClient
{ {
public OSBGrandExchangeResult lookupItem(int itemId) throws IOException public Observable<OSBGrandExchangeResult> lookupItem(int itemId)
{ {
final HttpUrl url = RuneLiteAPI.getApiBase().newBuilder() final HttpUrl url = RuneLiteAPI.getApiBase().newBuilder()
.addPathSegment("osb") .addPathSegment("osb")
@@ -47,23 +48,26 @@ public class OSBGrandExchangeClient
log.debug("Built URI: {}", url); log.debug("Built URI: {}", url);
final Request request = new Request.Builder() return Observable.defer(() ->
.url(url)
.build();
try (final Response response = RuneLiteAPI.CLIENT.newCall(request).execute())
{ {
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(); final InputStream in = response.body().byteStream();
return RuneLiteAPI.GSON.fromJson(new InputStreamReader(in), OSBGrandExchangeResult.class); return Observable.just(RuneLiteAPI.GSON.fromJson(new InputStreamReader(in), OSBGrandExchangeResult.class));
} }
catch (JsonParseException ex) catch (JsonParseException e)
{ {
throw new IOException(ex); return Observable.error(e);
} }
});
} }
} }

View File

@@ -25,15 +25,15 @@
*/ */
package net.runelite.client.plugins.chatcommands; package net.runelite.client.plugins.chatcommands;
import javax.inject.Singleton;
import net.runelite.api.vars.AccountType;
import com.google.inject.Provides; import com.google.inject.Provides;
import io.reactivex.schedulers.Schedulers;
import java.io.IOException; import java.io.IOException;
import java.util.List; import java.util.List;
import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledExecutorService;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Singleton;
import lombok.Value; import lombok.Value;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.runelite.api.ChatMessageType; 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.GameTick;
import net.runelite.api.events.VarbitChanged; import net.runelite.api.events.VarbitChanged;
import net.runelite.api.events.WidgetLoaded; import net.runelite.api.events.WidgetLoaded;
import net.runelite.api.vars.AccountType;
import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.Widget;
import static net.runelite.api.widgets.WidgetID.KILL_LOGS_GROUP_ID; import static net.runelite.api.widgets.WidgetID.KILL_LOGS_GROUP_ID;
import net.runelite.api.widgets.WidgetInfo; 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.hiscore.Skill;
import net.runelite.http.api.item.ItemPrice; import net.runelite.http.api.item.ItemPrice;
import net.runelite.http.api.osbuddy.OSBGrandExchangeClient; import net.runelite.http.api.osbuddy.OSBGrandExchangeClient;
import net.runelite.http.api.osbuddy.OSBGrandExchangeResult;
import org.apache.commons.text.WordUtils; import org.apache.commons.text.WordUtils;
@PluginDescriptor( @PluginDescriptor(
@@ -822,49 +822,46 @@ public class ChatCommandsPlugin extends Plugin
if (!results.isEmpty()) if (!results.isEmpty())
{ {
ItemPrice item = retrieveFromList(results, search); ItemPrice item = retrieveFromList(results, search);
OSBGrandExchangeResult osbresult = new OSBGrandExchangeResult(); CLIENT.lookupItem(item.getId())
try .subscribeOn(Schedulers.single())
{ .subscribe(
osbresult = CLIENT.lookupItem(item.getId()); (osbresult) ->
} {
catch (IOException e) int itemId = item.getId();
{ int itemPrice = itemManager.getItemPrice(itemId);
log.error("Error looking up prices", e);
}
int itemId = item.getId(); final ChatMessageBuilder builder = new ChatMessageBuilder();
int itemPrice = itemManager.getItemPrice(itemId); 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(); ItemDefinition itemComposition = itemManager.getItemDefinition(itemId);
builder.append(ChatColorType.NORMAL); if (itemComposition != null)
builder.append(ChatColorType.HIGHLIGHT); {
builder.append(item.getName()); int alchPrice = itemManager.getAlchValue(itemId);
builder.append(ChatColorType.NORMAL); builder
builder.append(": GE "); .append(ChatColorType.NORMAL)
builder.append(ChatColorType.HIGHLIGHT); .append(" HA value ")
builder.append(StackFormatter.formatNumber(itemPrice)); .append(ChatColorType.HIGHLIGHT)
builder.append(ChatColorType.NORMAL); .append(StackFormatter.formatNumber(alchPrice));
builder.append(": OSB "); }
builder.append(ChatColorType.HIGHLIGHT);
builder.append(StackFormatter.formatNumber(osbresult.getOverall_average()));
ItemDefinition itemComposition = itemManager.getItemDefinition(itemId); String response = builder.build();
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(); log.debug("Setting response {}", response);
messageNode.setRuneLiteFormatMessage(response);
log.debug("Setting response {}", response); chatMessageManager.update(messageNode);
messageNode.setRuneLiteFormatMessage(response); client.refreshChat();
chatMessageManager.update(messageNode); }
client.refreshChat(); );
} }
} }

View File

@@ -26,7 +26,7 @@ package net.runelite.client.plugins.examine;
import com.google.common.cache.Cache; import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheBuilder;
import java.io.IOException; import io.reactivex.schedulers.Schedulers;
import java.time.Instant; import java.time.Instant;
import java.util.ArrayDeque; import java.util.ArrayDeque;
import java.util.Deque; import java.util.Deque;
@@ -57,7 +57,6 @@ import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.util.StackFormatter; import net.runelite.client.util.StackFormatter;
import net.runelite.http.api.examine.ExamineClient; import net.runelite.http.api.examine.ExamineClient;
import net.runelite.http.api.osbuddy.OSBGrandExchangeClient; import net.runelite.http.api.osbuddy.OSBGrandExchangeClient;
import net.runelite.http.api.osbuddy.OSBGrandExchangeResult;
/** /**
* Submits examine info to the api * Submits examine info to the api
@@ -365,40 +364,40 @@ public class ExaminePlugin extends Plugin
if (gePrice > 0) if (gePrice > 0)
{ {
OSBGrandExchangeResult osbresult = new OSBGrandExchangeResult(); int finalQuantity = quantity;
try CLIENT.lookupItem(id)
{ .subscribeOn(Schedulers.single())
osbresult = CLIENT.lookupItem(id); .subscribe(
} (osbresult) ->
catch (IOException e) {
{ message
log.error(e.toString()); .append(ChatColorType.NORMAL)
} .append(" GE ")
message .append(ChatColorType.HIGHLIGHT)
.append(ChatColorType.NORMAL) .append(StackFormatter.formatNumber(gePrice * finalQuantity));
.append(" GE ")
.append(ChatColorType.HIGHLIGHT)
.append(StackFormatter.formatNumber(gePrice * quantity));
if (osbresult != null) if (osbresult != null)
{ {
message message
.append(ChatColorType.NORMAL) .append(ChatColorType.NORMAL)
.append(" OSB ") .append(" OSB ")
.append(ChatColorType.HIGHLIGHT) .append(ChatColorType.HIGHLIGHT)
.append(StackFormatter.formatNumber(osbresult.getOverall_average() * quantity)); .append(StackFormatter.formatNumber(osbresult.getOverall_average() * finalQuantity));
} }
if (quantity > 1) if (finalQuantity > 1)
{ {
message message
.append(ChatColorType.NORMAL) .append(ChatColorType.NORMAL)
.append(" (") .append(" (")
.append(ChatColorType.HIGHLIGHT) .append(ChatColorType.HIGHLIGHT)
.append(StackFormatter.formatNumber(gePrice)) .append(StackFormatter.formatNumber(gePrice))
.append(ChatColorType.NORMAL) .append(ChatColorType.NORMAL)
.append("ea)"); .append("ea)");
} }
},
(e) -> log.error(e.toString())
);
} }
if (alchPrice > 0) if (alchPrice > 0)

View File

@@ -30,8 +30,8 @@ package net.runelite.client.plugins.grandexchange;
import com.google.common.reflect.TypeToken; import com.google.common.reflect.TypeToken;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.inject.Provides; import com.google.inject.Provides;
import io.reactivex.schedulers.Schedulers;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.util.Map; 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.GameTick;
import net.runelite.api.events.GrandExchangeOfferChanged; import net.runelite.api.events.GrandExchangeOfferChanged;
import net.runelite.api.events.MenuEntryAdded; import net.runelite.api.events.MenuEntryAdded;
import net.runelite.api.events.WidgetLoaded;
import net.runelite.api.events.ScriptCallbackEvent; import net.runelite.api.events.ScriptCallbackEvent;
import net.runelite.api.events.WidgetLoaded;
import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.Widget;
import net.runelite.api.widgets.WidgetID; import net.runelite.api.widgets.WidgetID;
import net.runelite.api.widgets.WidgetInfo; 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.GrandExchangeClient;
import net.runelite.http.api.ge.GrandExchangeTrade; import net.runelite.http.api.ge.GrandExchangeTrade;
import net.runelite.http.api.osbuddy.OSBGrandExchangeClient; import net.runelite.http.api.osbuddy.OSBGrandExchangeClient;
import net.runelite.http.api.osbuddy.OSBGrandExchangeResult;
@PluginDescriptor( @PluginDescriptor(
name = "Grand Exchange", name = "Grand Exchange",
@@ -547,16 +546,16 @@ public class GrandExchangePlugin extends Plugin
return; return;
} }
try CLIENT.lookupItem(itemId)
{ .subscribeOn(Schedulers.single())
final OSBGrandExchangeResult result = CLIENT.lookupItem(itemId); .subscribe(
final String text = geText.getText() + OSB_GE_TEXT + StackFormatter.formatNumber(result.getOverall_average()); (osbresult) ->
geText.setText(text); {
} final String text = geText.getText() + OSB_GE_TEXT + StackFormatter.formatNumber(osbresult.getOverall_average());
catch (IOException e) geText.setText(text);
{ },
log.debug("Error getting price of item {}", itemId, e); (e) -> log.debug("Error getting price of item {}", itemId, e)
} );
}); });
} }