From 63c3937f8701b07b686b3ca29adee78b42f38670 Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 27 Jan 2019 15:21:45 -0500 Subject: [PATCH] Use websocket pings --- .../net/runelite/http/api/RuneLiteAPI.java | 2 + .../http/api/ws/WebsocketGsonFactory.java | 2 - .../runelite/http/api/ws/messages/Ping.java | 43 ------------------- .../java/net/runelite/client/ws/WSClient.java | 28 +----------- 4 files changed, 4 insertions(+), 71 deletions(-) delete mode 100644 http-api/src/main/java/net/runelite/http/api/ws/messages/Ping.java diff --git a/http-api/src/main/java/net/runelite/http/api/RuneLiteAPI.java b/http-api/src/main/java/net/runelite/http/api/RuneLiteAPI.java index 875b1181fa..3dee9272d9 100644 --- a/http-api/src/main/java/net/runelite/http/api/RuneLiteAPI.java +++ b/http-api/src/main/java/net/runelite/http/api/RuneLiteAPI.java @@ -28,6 +28,7 @@ import com.google.gson.Gson; import java.io.IOException; import java.io.InputStream; import java.util.Properties; +import java.util.concurrent.TimeUnit; import okhttp3.HttpUrl; import okhttp3.Interceptor; import okhttp3.OkHttpClient; @@ -77,6 +78,7 @@ public class RuneLiteAPI } CLIENT = new OkHttpClient.Builder() + .pingInterval(30, TimeUnit.SECONDS) .addNetworkInterceptor(new Interceptor() { diff --git a/http-api/src/main/java/net/runelite/http/api/ws/WebsocketGsonFactory.java b/http-api/src/main/java/net/runelite/http/api/ws/WebsocketGsonFactory.java index 501879509e..589a538de3 100644 --- a/http-api/src/main/java/net/runelite/http/api/ws/WebsocketGsonFactory.java +++ b/http-api/src/main/java/net/runelite/http/api/ws/WebsocketGsonFactory.java @@ -32,7 +32,6 @@ import java.util.Collections; import java.util.List; import net.runelite.http.api.ws.messages.Handshake; import net.runelite.http.api.ws.messages.LoginResponse; -import net.runelite.http.api.ws.messages.Ping; import net.runelite.http.api.ws.messages.party.Join; import net.runelite.http.api.ws.messages.party.Part; import net.runelite.http.api.ws.messages.party.UserJoin; @@ -48,7 +47,6 @@ public class WebsocketGsonFactory final List> messages = new ArrayList<>(); messages.add(Handshake.class); messages.add(LoginResponse.class); - messages.add(Ping.class); messages.add(Join.class); messages.add(Part.class); messages.add(UserJoin.class); diff --git a/http-api/src/main/java/net/runelite/http/api/ws/messages/Ping.java b/http-api/src/main/java/net/runelite/http/api/ws/messages/Ping.java deleted file mode 100644 index 3bc514cd56..0000000000 --- a/http-api/src/main/java/net/runelite/http/api/ws/messages/Ping.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) 2017, Adam - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package net.runelite.http.api.ws.messages; - -import java.time.Instant; -import net.runelite.http.api.ws.WebsocketMessage; - -public class Ping extends WebsocketMessage -{ - private Instant time; - - public Instant getTime() - { - return time; - } - - public void setTime(Instant time) - { - this.time = time; - } -} 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 279794862f..ae4f217154 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 @@ -26,14 +26,10 @@ package net.runelite.client.ws; import com.google.gson.Gson; import java.time.Duration; -import java.time.Instant; import java.util.Collection; import java.util.HashSet; import java.util.Objects; import java.util.UUID; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.ScheduledFuture; -import java.util.concurrent.TimeUnit; import javax.inject.Inject; import javax.inject.Singleton; import lombok.extern.slf4j.Slf4j; @@ -42,9 +38,7 @@ import net.runelite.http.api.RuneLiteAPI; 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.Ping; import net.runelite.http.api.ws.messages.party.PartyMessage; -import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import okhttp3.WebSocket; @@ -54,11 +48,7 @@ import okhttp3.WebSocketListener; @Singleton public class WSClient extends WebSocketListener implements AutoCloseable { - private static final Duration PING_TIME = Duration.ofSeconds(30); - - private final OkHttpClient client = new OkHttpClient(); private final EventBus eventBus; - private final ScheduledFuture pingFuture; private final Collection> messages = new HashSet<>(); private volatile Gson gson; @@ -66,10 +56,9 @@ public class WSClient extends WebSocketListener implements AutoCloseable private WebSocket webSocket; @Inject - private WSClient(EventBus eventBus, ScheduledExecutorService executor) + private WSClient(EventBus eventBus) { this.eventBus = eventBus; - this.pingFuture = executor.scheduleWithFixedDelay(this::ping, PING_TIME.getSeconds(), PING_TIME.getSeconds(), TimeUnit.SECONDS); this.gson = WebsocketGsonFactory.build(WebsocketGsonFactory.factory(messages)); } @@ -110,26 +99,13 @@ public class WSClient extends WebSocketListener implements AutoCloseable .url(RuneLiteAPI.getWsEndpoint()) .build(); - webSocket = client.newWebSocket(request, this); + webSocket = RuneLiteAPI.CLIENT.newWebSocket(request, this); Handshake handshake = new Handshake(); handshake.setSession(sessionId); send(handshake); } - private void ping() - { - if (webSocket == null) - { - // Don't open a socket just for ping. - return; - } - - Ping ping = new Ping(); - ping.setTime(Instant.now()); - send(ping); - } - public void registerMessage(final Class message) { if (messages.add(message))