package com.cardshifter.api.messages; import java.util.HashMap; import java.util.Map; import com.cardshifter.api.both.ChatMessage; import com.cardshifter.api.both.InviteRequest; import com.cardshifter.api.both.InviteResponse; import com.cardshifter.api.both.PlayerConfigMessage; import com.cardshifter.api.incoming.LoginMessage; import com.cardshifter.api.incoming.RequestTargetsMessage; import com.cardshifter.api.incoming.ServerQueryMessage; import com.cardshifter.api.incoming.StartGameRequest; import com.cardshifter.api.incoming.TransformerMessage; import com.cardshifter.api.incoming.UseAbilityMessage; import com.cardshifter.api.outgoing.*; /** * Message Type ID Resolver. * <p> * Resolves all messages' type ID to the correct class corresponding to this particular type. * Please note the use of the names <code>clazz / clazzes</code> in lieu of <code>class / classes</code> * because <code>class</code> is a reserved Java keyword. */ public class MessageTypeIdResolver { /** This value is used to map a String message ID to its corresponding message class */ private static final Map<String, Class<? extends Message>> clazzes = new HashMap<String, Class<? extends Message>>(); /** Array used to map this message ID key to its corresponding class */ static { // Serialize message (used principally for libGDX client) clazzes.put("serial", TransformerMessage.class); // Incoming messages to server clazzes.put("chat", ChatMessage.class); clazzes.put("login", LoginMessage.class); clazzes.put("startgame", StartGameRequest.class); clazzes.put("use", UseAbilityMessage.class); clazzes.put("requestTargets", RequestTargetsMessage.class); clazzes.put("zoneChange", ZoneChangeMessage.class); clazzes.put("entityRemoved", EntityRemoveMessage.class); clazzes.put("disconnect", ClientDisconnectedMessage.class); // Outgoing messages from server clazzes.put("status", ServerStatusMessage.class); clazzes.put("resetActions", ResetAvailableActionsMessage.class); clazzes.put("game", GameMessage.class); clazzes.put("gameover", GameOverMessage.class); clazzes.put("loginresponse", WelcomeMessage.class); clazzes.put("newgame", NewGameMessage.class); clazzes.put("player", PlayerMessage.class); clazzes.put("card", CardInfoMessage.class); clazzes.put("zone", ZoneMessage.class); clazzes.put("update", UpdateMessage.class); clazzes.put("useable", UsableActionMessage.class); clazzes.put("targets", AvailableTargetsMessage.class); clazzes.put("availableMods", AvailableModsMessage.class); clazzes.put("elimination", PlayerEliminatedMessage.class); // Messages both incoming and outgoing clazzes.put("inviteRequest", InviteRequest.class); clazzes.put("inviteResponse", InviteResponse.class); clazzes.put("error", ServerErrorMessage.class); clazzes.put("userstatus", UserStatusMessage.class); clazzes.put("query", ServerQueryMessage.class); clazzes.put("playerconfig", PlayerConfigMessage.class); } /** @return message ID key */ public static Class<? extends Message> get(String key) { return clazzes.get(key); } }