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 71c421d491..7b49293bda 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 @@ -24,23 +24,63 @@ */ package net.runelite.http.api.ws; -import net.runelite.http.api.ws.messages.LoginResponse; -import net.runelite.http.api.ws.messages.Handshake; -import net.runelite.http.api.ws.messages.Ping; import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import java.util.ArrayList; +import java.util.Collection; +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; +import net.runelite.http.api.ws.messages.party.UserPart; public class WebsocketGsonFactory { - public static Gson build() - { - RuntimeTypeAdapterFactory typeAdapter = RuntimeTypeAdapterFactory.of(WebsocketMessage.class) - .registerSubtype(Handshake.class) - .registerSubtype(LoginResponse.class) - .registerSubtype(Ping.class); + private static final Collection> MESSAGES; + static + { + 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); + messages.add(UserPart.class); + MESSAGES = messages; + } + + public static RuntimeTypeAdapterFactory factory(final Collection> messages) + { + final RuntimeTypeAdapterFactory factory = RuntimeTypeAdapterFactory.of(WebsocketMessage.class); + + for (Class message : MESSAGES) + { + factory.registerSubtype(message); + } + + for (Class message : messages) + { + factory.registerSubtype(message); + } + + return factory; + } + + public static Gson build(final RuntimeTypeAdapterFactory factory) + { return new GsonBuilder() - .registerTypeAdapterFactory(typeAdapter) + .registerTypeAdapterFactory(factory) .create(); } + + public static Gson build() + { + return build(factory(Collections.emptyList())); + } }