/* * 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.stevewinfield.suja.idk.Bootloader; import org.stevewinfield.suja.idk.InputFilter; import org.stevewinfield.suja.idk.communication.IMessageReader; import org.stevewinfield.suja.idk.communication.MessageReader; import org.stevewinfield.suja.idk.communication.messenger.writers.MessengerRequestNoficiationWriter; import org.stevewinfield.suja.idk.game.messenger.MessengerRequest; import org.stevewinfield.suja.idk.network.sessions.Session; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class SendFriendRequestReader implements IMessageReader { private static final Logger logger = Logger.getLogger(SendFriendRequestReader.class); @Override public void parse(final Session session, final MessageReader reader) { if (!session.isAuthenticated()) { return; } String requestName = InputFilter.filterString(reader.readUTF()); if (requestName.length() > 100) { requestName = requestName.substring(0, 100); } try { final PreparedStatement sthId = Bootloader.getStorage().queryParams("SELECT id FROM players WHERE nickname=?"); sthId.setString(1, requestName); final ResultSet row = sthId.executeQuery(); if (!row.next()) { return; } final int requestId = row.getInt("id"); if (requestId < 1 || requestId == session.getPlayerInstance().getInformation().getId() || session.getPlayerMessenger().getBuddies().containsKey(requestId) || session.getPlayerMessenger().getRequests().containsKey(requestId) || Bootloader.getStorage().readInteger("SELECT COUNT(id) FROM player_friends WHERE player_req_id=" + session.getPlayerInstance().getInformation().getId() + " AND player_acc_id=" + requestId) > 0) { return; } final PreparedStatement sthCrt = Bootloader.getStorage().queryParams("INSERT INTO player_friends (player_req_id, player_acc_id, request_playername, request_playerfigure, is_request) VALUES (" + session.getPlayerInstance().getInformation().getId() + ", " + requestId + ", ?, ?, 1)"); sthCrt.setString(1, session.getPlayerInstance().getInformation().getPlayerName()); sthCrt.setString(2, session.getPlayerInstance().getInformation().getAvatar()); sthCrt.execute(); final Session requestSession = Bootloader.getSessionManager().getAuthenticatedSession(requestId); if (requestSession != null && requestSession.isAuthenticated()) { final MessengerRequest request = new MessengerRequest(); request.set(session.getPlayerInstance().getInformation().getId(), session.getPlayerInstance().getInformation().getPlayerName(), session.getPlayerInstance().getInformation().getAvatar()); requestSession.getPlayerMessenger().getRequests().put(session.getPlayerInstance().getInformation().getId(), request); requestSession.writeMessage(new MessengerRequestNoficiationWriter(session.getPlayerInstance().getInformation().getId(), session.getPlayerInstance().getInformation().getPlayerName(), session.getPlayerInstance().getInformation().getAvatar())); } } catch (final SQLException e) { logger.error("SQL Exception", e); } } }