/* * IDK Game Server by Steve Winfield * https://github.com/WinfieldSteve */ package org.stevewinfield.suja.idk.communication.messenger.readers; import org.stevewinfield.suja.idk.Bootloader; import org.stevewinfield.suja.idk.communication.IMessageReader; import org.stevewinfield.suja.idk.communication.MessageReader; import org.stevewinfield.suja.idk.communication.MessageWriter; import org.stevewinfield.suja.idk.communication.QueuedMessageWriter; import org.stevewinfield.suja.idk.communication.messenger.writers.MessengerUpdateListWriter; import org.stevewinfield.suja.idk.game.messenger.MessengerBuddy; import org.stevewinfield.suja.idk.network.sessions.Session; public class FriendRemoveReader implements IMessageReader { @Override public void parse(final Session session, final MessageReader reader) { if (!session.isAuthenticated()) { return; } int amount = reader.readInteger(); if (amount > 50) { amount = 50; } final MessengerBuddy sessionBuddy = new MessengerBuddy(); sessionBuddy.set(session.getPlayerInstance().getInformation().getId(), session.getPlayerInstance().getInformation().getPlayerName(), session.getPlayerInstance().getInformation().getAvatar(), session.getPlayerInstance().getInformation().getMission()); final QueuedMessageWriter queue = new QueuedMessageWriter(); final MessageWriter broadcastOldFriend = new MessengerUpdateListWriter(sessionBuddy, -1); final String query = "DELETE FROM player_friends WHERE "; String where = ""; for (int i = 0; i < amount; i++) { final int playerId = reader.readInteger(); if (session.getPlayerMessenger().getBuddies().containsKey(playerId)) { where += " OR ((player_req_id=" + session.getPlayerInstance().getInformation().getId() + " AND player_acc_id=" + playerId + ") OR (player_req_id=" + playerId + " AND player_acc_id=" + session.getPlayerInstance().getInformation().getId() + "))"; final MessengerBuddy buddy = session.getPlayerMessenger().getBuddies().get(playerId); session.getPlayerMessenger().getBuddies().remove(playerId); if (buddy.getSession() != null) { session.getPlayerMessenger().getOnlineBuddies().remove(playerId); buddy.getSession().getPlayerMessenger().getBuddies().remove(session.getPlayerInstance().getInformation().getId()); buddy.getSession().getPlayerMessenger().getOnlineBuddies().remove(session.getPlayerInstance().getInformation().getId()); buddy.getSession().writeMessage(broadcastOldFriend); } queue.push(new MessengerUpdateListWriter(buddy, -1)); } } if (!where.equals("")) { Bootloader.getStorage().executeQuery(query + where.substring(4)); } session.writeMessage(queue); } }