From 7e6476ce6702acd7ea3d496657d5d4e7a46434f2 Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 11 May 2019 19:59:51 -0400 Subject: [PATCH] party service: check joins are for the current party The server can resume party membership on handshake to parties other than the current client party (eg. if the client is restarted or for any other reason the current party changes). This desyncs otherwise if the joins aren't checked to be in the current party. --- .../net/runelite/http/api/ws/messages/party/UserJoin.java | 1 + .../src/main/java/net/runelite/client/ws/PartyService.java | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/http-api/src/main/java/net/runelite/http/api/ws/messages/party/UserJoin.java b/http-api/src/main/java/net/runelite/http/api/ws/messages/party/UserJoin.java index 81abe76827..7f940e8060 100644 --- a/http-api/src/main/java/net/runelite/http/api/ws/messages/party/UserJoin.java +++ b/http-api/src/main/java/net/runelite/http/api/ws/messages/party/UserJoin.java @@ -34,5 +34,6 @@ import net.runelite.http.api.ws.WebsocketMessage; public class UserJoin extends WebsocketMessage { private final UUID memberId; + private final UUID partyId; private final String name; } diff --git a/runelite-client/src/main/java/net/runelite/client/ws/PartyService.java b/runelite-client/src/main/java/net/runelite/client/ws/PartyService.java index 47e9c18148..caec527320 100644 --- a/runelite-client/src/main/java/net/runelite/client/ws/PartyService.java +++ b/runelite-client/src/main/java/net/runelite/client/ws/PartyService.java @@ -114,6 +114,13 @@ public class PartyService @Subscribe public void onUserJoin(final UserJoin message) { + if (!partyId.equals(message.getPartyId())) + { + // This can happen when a session is resumed server side after the client party + // changes when disconnected. + return; + } + final PartyMember partyMember = new PartyMember(message.getMemberId(), message.getName()); members.add(partyMember);