package com.asteria.net.message.impl; import com.asteria.game.character.player.Player; import com.asteria.net.message.InputMessageListener; import com.asteria.net.message.MessageBuilder; /** * The message sent from the client when a player adds, removes, or sends someone * a message. * * @author lare96 <http://github.com/lare96> */ public final class PrivateMessagingMessage implements InputMessageListener { @Override public void handleMessage(Player player, int opcode, int size, MessageBuilder payload) { if (player.isDisabled()) return; switch (opcode) { case 188: addFriend(player, payload); break; case 215: removeFriend(player, payload); break; case 133: addIgnore(player, payload); break; case 74: removeIgnore(player, payload); break; case 126: sendMessage(player, size, payload); break; } } /** * Handles the adding of a new friend. * * @param player * the player to handle this for. * @param payload * the payloadfer used for reading sent data. */ private void addFriend(Player player, MessageBuilder payload) { long name = payload.getLong(); if (name < 0) return; player.getPrivateMessage().addFriend(name); } /** * Handles the removing of an existing friend. * * @param player * the player to handle this for. * @param payload * the payloadfer used for reading sent data. */ private void removeFriend(Player player, MessageBuilder payload) { long name = payload.getLong(); if (name < 0) return; player.getPrivateMessage().removeFriend(name); } /** * Handles the adding of a new ignore. * * @param player * the player to handle this for. * @param payload * the payloadfer used for reading sent data. */ private void addIgnore(Player player, MessageBuilder payload) { long name = payload.getLong(); if (name < 0) return; player.getPrivateMessage().addIgnore(name); } /** * Handles the removing of an existing ignore. * * @param player * the player to handle this for. * @param payload * the payloadfer used for reading sent data. */ private void removeIgnore(Player player, MessageBuilder payload) { long name = payload.getLong(); if (name < 0) return; player.getPrivateMessage().removeIgnore(name); } /** * Handles the sending of a private message. * * @param player * the player to handle this for. * @param payload * the payloadfer used for reading sent data. */ private void sendMessage(Player player, int size, MessageBuilder payload) { long to = payload.getLong(); int newSize = size - 8; byte[] message = payload.getBytes(newSize); if (to < 0 || newSize < 0 || message == null) return; if (!player.getFriends().contains(to)) { player.getMessages().sendMessage("You cannot send a message to a " + "player not on your friends list!"); return; } player.getPrivateMessage().sendPrivateMessage(to, message, newSize); } }