From e4828a597c24754526477c14911108fcf559fc60 Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Sun, 3 Feb 2019 00:42:11 +0100 Subject: [PATCH] Prevent WSMessage deserialization failure from closing websocket As messages that are serialized and deserialized are purely option and can vary between source and destination, simply catch deserialization failure to prevent OkHttp from closing websocket. Signed-off-by: Tomas Slusny --- .../main/java/net/runelite/client/ws/WSClient.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) 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 3398a32685..42b61b83bd 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 @@ -25,6 +25,7 @@ package net.runelite.client.ws; import com.google.gson.Gson; +import com.google.gson.JsonParseException; import java.util.Collection; import java.util.HashSet; import java.util.Objects; @@ -154,7 +155,18 @@ public class WSClient extends WebSocketListener implements AutoCloseable @Override public void onMessage(WebSocket webSocket, String text) { - final WebsocketMessage message = gson.fromJson(text, WebsocketMessage.class); + final WebsocketMessage message; + + try + { + message = gson.fromJson(text, WebsocketMessage.class); + } + catch (JsonParseException e) + { + log.debug("Failed to deserialize message", e); + return; + } + if (message.isParty() && !(message instanceof PartyMessage)) { // spoofed message?