package com.faforever.client.remote.gson; import com.faforever.client.relay.GpgServerMessageType; import com.faforever.client.remote.domain.FafServerMessageType; import com.faforever.client.remote.domain.MessageTarget; import com.faforever.client.remote.domain.ServerMessage; import com.faforever.client.remote.domain.ServerMessageType; import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonDeserializer; import com.google.gson.JsonElement; import com.google.gson.JsonNull; import com.google.gson.JsonObject; import com.google.gson.JsonParseException; import java.lang.reflect.Type; public class ServerMessageTypeAdapter implements JsonDeserializer<ServerMessage> { public static final ServerMessageTypeAdapter INSTANCE = new ServerMessageTypeAdapter(); @Override public ServerMessage deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { JsonObject jsonObject = json.getAsJsonObject(); String command = jsonObject.get("command").getAsString(); JsonElement targetElement = jsonObject.get("target"); String target = null; if (targetElement != null && targetElement != JsonNull.INSTANCE) { target = targetElement.getAsString(); } MessageTarget messageTarget = MessageTarget.fromString(target); ServerMessageType serverMessageType; switch (messageTarget) { case GAME: case CONNECTIVITY: serverMessageType = GpgServerMessageType.fromString(command); break; case CLIENT: serverMessageType = FafServerMessageType.fromString(command); break; default: return null; } if (serverMessageType == null) { return null; } return context.deserialize(jsonObject, serverMessageType.getType()); } }