/* * IDK Game Server by Steve Winfield * https://github.com/WinfieldSteve */ package org.stevewinfield.suja.idk.communication.messenger.readers; import org.apache.log4j.Logger; import org.magicwerk.brownies.collections.GapList; 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.game.friendstream.FriendStream; import org.stevewinfield.suja.idk.game.friendstream.FriendStreamEventType; import org.stevewinfield.suja.idk.game.friendstream.FriendStreamLinkType; import org.stevewinfield.suja.idk.game.messenger.MessengerBuddy; import org.stevewinfield.suja.idk.game.players.PlayerInformation; import org.stevewinfield.suja.idk.network.sessions.Session; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; public class FriendRequestAcceptReader implements IMessageReader { private static final Logger logger = Logger.getLogger(FriendRequestAcceptReader.class); @Override public void parse(final Session session, final MessageReader reader) { if (!session.isAuthenticated()) { return; } int amount = reader.readInteger(); if (amount > 50) { amount = 50; } final List<Session> newFriends = new GapList<>(); final String updateString = "UPDATE player_friends SET is_request=0 WHERE player_acc_id=" + session.getPlayerInstance().getInformation().getId(); String whereString = ""; for (int i = 0; i < amount; i++) { final int playerId = reader.readInteger(); if (session.getPlayerMessenger().getRequests().containsKey(playerId)) { final Session friend = Bootloader.getSessionManager().getAuthenticatedSession(playerId); if (friend != null) { newFriends.add(friend); } whereString += " OR player_req_id=" + playerId; session.getPlayerMessenger().getRequests().remove(playerId); ResultSet userInfo; try { userInfo = Bootloader.getStorage().queryParams("SELECT id, nickname, figurecode, motto, gender, stream_enabled FROM players WHERE id = " + playerId).executeQuery(); if (userInfo.next()) { final MessengerBuddy buddy = new MessengerBuddy(); buddy.set(userInfo); if (session.getPlayerInstance().getInformation().isStreamEnabled()) { session.getFriendStream().broadcastEvent(session, FriendStreamEventType.FRIEND_MADE, FriendStreamLinkType.FRIEND_REQUEST, new String[]{playerId + "", userInfo.getString("nickname")}); } session.getPlayerMessenger().getBuddies().put(playerId, buddy); if (buddy.isOnline()) { session.getPlayerMessenger().onStatusChanged(playerId, true); if (userInfo.getInt("stream_enabled") == 1) { buddy.getSession().getFriendStream().broadcastEvent(buddy.getSession(), FriendStreamEventType.FRIEND_MADE, FriendStreamLinkType.FRIEND_REQUEST, new String[]{session.getPlayerInstance().getInformation().getId() + "", session.getPlayerInstance().getInformation().getPlayerName()}); } } else if (userInfo.getInt("stream_enabled") == 1) { session.getPlayerMessenger().onStatusChanged(playerId, false); final GapList<Integer> friends = new GapList<>(); final ResultSet row = Bootloader.getStorage().queryParams("SELECT player_acc_id, player_req_id, is_request FROM player_friends WHERE player_req_id = " + playerId + " OR player_acc_id = " + playerId + " ORDER BY id").executeQuery(); while (row.next()) { if (row.getInt("is_request") == 1) { continue; } int mId; if (row.getInt("player_acc_id") != playerId) { mId = row.getInt("player_acc_id"); } else { mId = row.getInt("player_req_id"); } friends.add(mId); } new FriendStream(playerId, friends) .broadcastEvent( playerId, userInfo.getString("nickname"), userInfo.getString("figurecode"), userInfo.getString("gender").toLowerCase().equals("m") ? PlayerInformation.MALE_GENDER : PlayerInformation.FEMALE_GENDER, FriendStreamEventType.FRIEND_MADE, FriendStreamLinkType.FRIEND_REQUEST, new String[]{ session.getPlayerInstance().getInformation().getId() + "", session.getPlayerInstance().getInformation().getPlayerName() } ); } session.getFriendStream().addFriend(playerId); } userInfo.close(); } catch (final SQLException e) { logger.error("SQL Exception", e); } } } if (!whereString.equals("")) { Bootloader.getStorage().executeQuery(updateString + " AND (" + whereString.substring(4) + ")"); } for (final Session newFriend : newFriends) { if (newFriend.isAuthenticated()) { final MessengerBuddy buddy = new MessengerBuddy(); buddy.set(session.getPlayerInstance().getInformation().getId(), session.getPlayerInstance().getInformation().getPlayerName(), session.getPlayerInstance().getInformation().getAvatar(), session.getPlayerInstance().getInformation().getMission()); newFriend.getPlayerMessenger().getBuddies().put(session.getPlayerInstance().getInformation().getId(), buddy); newFriend.getPlayerMessenger().onStatusChanged(session.getPlayerInstance().getInformation().getId(), true); newFriend.getFriendStream().addFriend(session.getPlayerInstance().getInformation().getId()); } } } }