/*
* IDK Game Server by Steve Winfield
* https://github.com/WinfieldSteve
*/
package org.stevewinfield.suja.idk.communication;
import org.apache.log4j.Logger;
import org.stevewinfield.suja.idk.IDK;
import org.stevewinfield.suja.idk.communication.achievement.readers.GetAchievementListReader;
import org.stevewinfield.suja.idk.communication.catalog.readers.*;
import org.stevewinfield.suja.idk.communication.catalog.recycler.readers.GetRecyclerConfigurationReader;
import org.stevewinfield.suja.idk.communication.catalog.recycler.readers.GetRewardsListReader;
import org.stevewinfield.suja.idk.communication.catalog.recycler.readers.RecycleItemsReader;
import org.stevewinfield.suja.idk.communication.friendstream.readers.FriendStreamEventRequestReader;
import org.stevewinfield.suja.idk.communication.friendstream.readers.ToggleFriendStreamReader;
import org.stevewinfield.suja.idk.communication.global.readers.DebugEventReader;
import org.stevewinfield.suja.idk.communication.global.readers.LatencyTestReader;
import org.stevewinfield.suja.idk.communication.handshake.readers.AuthenticatePlayerReader;
import org.stevewinfield.suja.idk.communication.handshake.readers.InitializeCryptoReader;
import org.stevewinfield.suja.idk.communication.handshake.readers.ShowDayMessageReader;
import org.stevewinfield.suja.idk.communication.inventory.readers.*;
import org.stevewinfield.suja.idk.communication.messenger.readers.*;
import org.stevewinfield.suja.idk.communication.moderation.readers.GetModerationPlayerInfoReader;
import org.stevewinfield.suja.idk.communication.moderation.readers.GetModerationRoomInfoReader;
import org.stevewinfield.suja.idk.communication.moderation.readers.ModerationPlayerMessageReader;
import org.stevewinfield.suja.idk.communication.navigator.readers.*;
import org.stevewinfield.suja.idk.communication.player.readers.*;
import org.stevewinfield.suja.idk.communication.quests.readers.GetQuestsListReader;
import org.stevewinfield.suja.idk.communication.room.readers.*;
import org.stevewinfield.suja.idk.communication.room.settings.readers.EditRoomReader;
import org.stevewinfield.suja.idk.communication.room.settings.readers.RoomEditGetInfoReader;
import org.stevewinfield.suja.idk.communication.room.wired.readers.SaveWiredReader;
import org.stevewinfield.suja.idk.communication.trading.readers.*;
import org.stevewinfield.suja.idk.network.sessions.Session;
import java.util.HashMap;
import java.util.Map;
public class MessageHandler {
private static final Logger logger = Logger.getLogger(MessageHandler.class);
private static Map<Short, IMessageReader> messages;
public static void loadMessages() {
messages = new HashMap<>();
putHandshakeMessages();
putPlayerMessages();
putGlobalMessages();
putAchievementMessages();
putMessengerMessages();
putNavigatorMessages();
putRoomMessages();
putInventoryMessages();
putCatalogMessages();
putRecyclerMessages();
putFriendStreamMessages();
putModerationMessages();
putQuestsMessages();
logger.info(messages.size() + " Message Reader(s) loaded.");
}
private static void putHandshakeMessages() {
messages.put(OperationCodes.getIncomingOpCode("InitCrypto"), new InitializeCryptoReader());
messages.put(OperationCodes.getIncomingOpCode("AuthenticatePlayer"), new AuthenticatePlayerReader());
}
private static void putPlayerMessages() {
messages.put(OperationCodes.getIncomingOpCode("GetPlayerInfo"), new GetPlayerInfoReader());
messages.put(OperationCodes.getIncomingOpCode("PlayerBalance"), new GetPlayerBalanceReader());
messages.put(OperationCodes.getIncomingOpCode("DayMessage"), new ShowDayMessageReader());
messages.put(OperationCodes.getIncomingOpCode("SetPlayerFigure"), new SetPlayerFigureReader());
messages.put(OperationCodes.getIncomingOpCode("GetSubscriptionData"), new GetSubscriptionDataReader());
messages.put(OperationCodes.getIncomingOpCode("SetPlayerMotto"), new SetPlayerMottoReader());
}
private static void putGlobalMessages() {
messages.put(OperationCodes.getIncomingOpCode("DebugEvent"), new DebugEventReader());
messages.put(OperationCodes.getIncomingOpCode("LatencyTest"), new LatencyTestReader());
}
private static void putAchievementMessages() {
messages.put(OperationCodes.getIncomingOpCode("GetAchievementList"), new GetAchievementListReader());
}
private static void putMessengerMessages() {
messages.put(OperationCodes.getIncomingOpCode("InitializeMessenger"), new InitializeMessengerReader());
messages.put(OperationCodes.getIncomingOpCode("SendInstantMessage"), new SendInstantMessageReader());
messages.put(OperationCodes.getIncomingOpCode("FriendRequestAccept"), new FriendRequestAcceptReader());
messages.put(OperationCodes.getIncomingOpCode("FriendRequestDecline"), new FriendRequestDeclineReader());
messages.put(OperationCodes.getIncomingOpCode("MessengerSearch"), new MessengerSearchReader());
messages.put(OperationCodes.getIncomingOpCode("FriendRemove"), new FriendRemoveReader());
messages.put(OperationCodes.getIncomingOpCode("SendFriendRequest"), new SendFriendRequestReader());
messages.put(OperationCodes.getIncomingOpCode("SendInstantInvite"), new SendInstantInviteReader());
messages.put(OperationCodes.getIncomingOpCode("OnFollowBuddy"), new OnFollowBuddyReader());
}
private static void putNavigatorMessages() {
messages.put(OperationCodes.getIncomingOpCode("ListPopularRooms"), new ListPopularRoomsReader());
messages.put(OperationCodes.getIncomingOpCode("ListPlayerRooms"), new ListPlayerRoomsReader());
messages.put(OperationCodes.getIncomingOpCode("CheckCanCreateRoom"), new CheckCanCreateRoomReader());
messages.put(OperationCodes.getIncomingOpCode("CreateRoom"), new CreateRoomReader());
messages.put(OperationCodes.getIncomingOpCode("GetRoomCategories"), new GetRoomCategoriesReader());
messages.put(OperationCodes.getIncomingOpCode("GetOfficialRooms"), new GetOfficialRoomsReader());
messages.put(OperationCodes.getIncomingOpCode("GetPopularTags"), new GetPopularTagsReader());
messages.put(OperationCodes.getIncomingOpCode("PerformNavigatorSearch"), new PerformNavigatorSearchReader());
messages.put(OperationCodes.getIncomingOpCode("PerformNavigatorTagSearch"), new PerformNavigatorSearchReader());
messages.put(OperationCodes.getIncomingOpCode("AddFavorite"), new AddFavoriteReader());
messages.put(OperationCodes.getIncomingOpCode("RemoveFavorite"), new RemoveFavoriteReader());
}
private static void putRoomMessages() {
messages.put(OperationCodes.getIncomingOpCode("OpenFlatConnection"), new OpenFlatConnectionReader());
messages.put(OperationCodes.getIncomingOpCode("GetGroupBadges"), new GetGroupBadgesReader());
messages.put(OperationCodes.getIncomingOpCode("GetFurniCampaigns"), new GetFurniCampaignsReader());
messages.put(OperationCodes.getIncomingOpCode("GetRoomModel"), new GetRoomModelReader());
messages.put(OperationCodes.getIncomingOpCode("GetRoomObjects"), new GetRoomObjectsReader());
messages.put(OperationCodes.getIncomingOpCode("RoomPlayerChatShout"), new RoomPlayerChatReader());
messages.put(OperationCodes.getIncomingOpCode("RoomPlayerChatTalk"), new RoomPlayerChatReader());
messages.put(OperationCodes.getIncomingOpCode("RoomPlayerStartTyping"), new TypingStateChangedReader());
messages.put(OperationCodes.getIncomingOpCode("RoomPlayerStopTyping"), new TypingStateChangedReader());
messages.put(OperationCodes.getIncomingOpCode("MoveFloorItem"), new MoveFloorItemReader());
messages.put(OperationCodes.getIncomingOpCode("PlayerMove"), new PlayerMoveReader());
messages.put(OperationCodes.getIncomingOpCode("TriggerRoomFloorItem"), new TriggerRoomItemReader());
messages.put(OperationCodes.getIncomingOpCode("TriggerRoomWallItem"), new TriggerRoomItemReader());
messages.put(OperationCodes.getIncomingOpCode("PlaceItem"), new PlaceItemReader());
messages.put(OperationCodes.getIncomingOpCode("RoomItemPlaceSticky"), new PlaceItemReader());
messages.put(OperationCodes.getIncomingOpCode("TakeItem"), new TakeItemReader());
messages.put(OperationCodes.getIncomingOpCode("RoomPlayerWaves"), new RoomPlayerWavesReader());
messages.put(OperationCodes.getIncomingOpCode("RoomPlayerDance"), new RoomPlayerDanceReader());
messages.put(OperationCodes.getIncomingOpCode("RoomInterstitial"), new RoomInterstitialReader());
messages.put(OperationCodes.getIncomingOpCode("SaveWiredEffect"), new SaveWiredReader());
messages.put(OperationCodes.getIncomingOpCode("SaveWiredTrigger"), new SaveWiredReader());
messages.put(OperationCodes.getIncomingOpCode("RoomEditGetInfo"), new RoomEditGetInfoReader());
messages.put(OperationCodes.getIncomingOpCode("EditRoom"), new EditRoomReader());
messages.put(OperationCodes.getIncomingOpCode("RoomKick"), new RoomKickReader());
messages.put(OperationCodes.getIncomingOpCode("MoveWallItem"), new MoveWallItemReader());
messages.put(OperationCodes.getIncomingOpCode("RoomApplyDecoration"), new RoomApplyDecorationReader());
messages.put(OperationCodes.getIncomingOpCode("GetMoodlightInfo"), new GetMoodlightInfoReader());
messages.put(OperationCodes.getIncomingOpCode("SwitchMoodlight"), new SwitchMoodlightReader());
messages.put(OperationCodes.getIncomingOpCode("UpdateMoodlight"), new UpdateMoodlightReader());
messages.put(OperationCodes.getIncomingOpCode("ItemActivateWheel"), new TriggerRoomItemReader());
messages.put(OperationCodes.getIncomingOpCode("ItemActivateExchange"), new ItemActivateExchangeReader());
messages.put(OperationCodes.getIncomingOpCode("ItemActivateDice"), new TriggerRoomItemReader());
messages.put(OperationCodes.getIncomingOpCode("ItemClearDice"), new TriggerRoomItemReader());
messages.put(OperationCodes.getIncomingOpCode("InitiateTrade"), new InitiateTradeReader());
messages.put(OperationCodes.getIncomingOpCode("TradeOffer"), new TradeOfferReader());
messages.put(OperationCodes.getIncomingOpCode("TradeTakeBack"), new TradeTakeBackReader());
messages.put(OperationCodes.getIncomingOpCode("TradeAccept"), new TradeAcceptReader());
messages.put(OperationCodes.getIncomingOpCode("TradeComplete"), new TradeCompleteReader());
messages.put(OperationCodes.getIncomingOpCode("TradeModify"), new TradeModifyReader());
messages.put(OperationCodes.getIncomingOpCode("TradeStop1"), new TradeStopReader());
messages.put(OperationCodes.getIncomingOpCode("TradeStop2"), new TradeStopReader());
messages.put(OperationCodes.getIncomingOpCode("PlayerChangeRotation"), new PlayerChangeRotationReader());
messages.put(OperationCodes.getIncomingOpCode("PlayerWhisper"), new PlayerWhisperReader());
messages.put(OperationCodes.getIncomingOpCode("AnswerDoorbell"), new AnswerDoorbellReader());
messages.put(OperationCodes.getIncomingOpCode("ContinueLoadingAfterDoorbell"), new ContinueLoadingAfterDoorbellReader());
messages.put(OperationCodes.getIncomingOpCode("RateRoom"), new RateRoomReader());
messages.put(OperationCodes.getIncomingOpCode("SetHomeRoom"), new SetHomeRoomReader());
messages.put(OperationCodes.getIncomingOpCode("GetRoomInformation"), new GetRoomInformationReader());
messages.put(OperationCodes.getIncomingOpCode("RespectPlayer"), new RespectPlayerReader());
messages.put(OperationCodes.getIncomingOpCode("GiveRights"), new GiveRightsReader());
messages.put(OperationCodes.getIncomingOpCode("TakeRights"), new TakeRightsReader());
messages.put(OperationCodes.getIncomingOpCode("TakeAllRights"), new TakeAllRightsReader());
messages.put(OperationCodes.getIncomingOpCode("OpenSticky"), new OpenStickyReader());
messages.put(OperationCodes.getIncomingOpCode("SaveSticky"), new SaveStickyReader());
messages.put(OperationCodes.getIncomingOpCode("DeleteSticky"), new DeleteStickyReader());
messages.put(OperationCodes.getIncomingOpCode("OpenBox"), new OpenBoxReader());
}
private static void putInventoryMessages() {
messages.put(OperationCodes.getIncomingOpCode("GetObjectInventory"), new GetObjectInventoryReader());
messages.put(OperationCodes.getIncomingOpCode("ActivatePlayerEffect"), new ActivatePlayerEffectReader());
messages.put(OperationCodes.getIncomingOpCode("ApplyPlayerEffect"), new ApplyPlayerEffectReader());
}
private static void putCatalogMessages() {
messages.put(OperationCodes.getIncomingOpCode("GetCatalogIndex"), new GetCatalogIndexReader());
messages.put(OperationCodes.getIncomingOpCode("GetCatalogPage"), new GetCatalogPageReader());
messages.put(OperationCodes.getIncomingOpCode("PurchaseItem"), new PurchaseItemReader());
messages.put(OperationCodes.getIncomingOpCode("GetClubOffers"), new GetClubOffersReader());
messages.put(OperationCodes.getIncomingOpCode("GetMonthlyClubGifts"), new GetMonthlyClubGiftsReader());
messages.put(OperationCodes.getIncomingOpCode("ChooseCatalogClubGift"), new ChooseCatalogClubGiftReader());
messages.put(OperationCodes.getIncomingOpCode("CheckCanGift"), new CheckCanGiftReader());
messages.put(OperationCodes.getIncomingOpCode("GetCatalogGiftWrappingSettings"), new GetCatalogGiftWrappingSettingsReader());
messages.put(OperationCodes.getIncomingOpCode("PurchaseGiftItem"), new PurchaseGiftItemReader());
}
private static void putRecyclerMessages() {
messages.put(OperationCodes.getIncomingOpCode("GetRewardsList"), new GetRewardsListReader());
messages.put(OperationCodes.getIncomingOpCode("GetRecyclerConfiguration"), new GetRecyclerConfigurationReader());
messages.put(OperationCodes.getIncomingOpCode("RecycleItems"), new RecycleItemsReader());
}
private static void putFriendStreamMessages() {
messages.put(OperationCodes.getIncomingOpCode("ToggleFriendStream"), new ToggleFriendStreamReader());
messages.put(OperationCodes.getIncomingOpCode("FriendStreamEventRequest"), new FriendStreamEventRequestReader());
}
private static void putModerationMessages() {
messages.put(OperationCodes.getIncomingOpCode("GetModerationRoomInfo"), new GetModerationRoomInfoReader());
messages.put(OperationCodes.getIncomingOpCode("GetModerationPlayerInfo"), new GetModerationPlayerInfoReader());
messages.put(OperationCodes.getIncomingOpCode("ModerationPlayerMessage"), new ModerationPlayerMessageReader());
}
private static void putQuestsMessages() {
messages.put(OperationCodes.getIncomingOpCode("GetQuestsList"), new GetQuestsListReader());
}
public static void handleMessage(final Session session, final MessageReader reader) {
final boolean contains = messages.containsKey(reader.getMessageId());
if (IDK.DEBUG) {
logger.debug("REC #" + reader.getMessageId() + " " + (contains ? "[HANDLING]" : "") + " " + reader.getDebugString());
}
if (messages.containsKey(reader.getMessageId())) {
messages.get(reader.getMessageId()).parse(session, reader);
}
reader.dispose();
}
}