/*
* 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.InputFilter;
import org.stevewinfield.suja.idk.communication.IMessageReader;
import org.stevewinfield.suja.idk.communication.MessageReader;
import org.stevewinfield.suja.idk.communication.messenger.writers.MessengerSearchResultWriter;
import org.stevewinfield.suja.idk.game.messenger.MessengerBuddy;
import org.stevewinfield.suja.idk.network.sessions.Session;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
public class MessengerSearchReader implements IMessageReader {
private static final Logger logger = Logger.getLogger(MessengerSearchReader.class);
@Override
public void parse(final Session session, final MessageReader reader) {
if (!session.isAuthenticated()) {
return;
}
String query = InputFilter.filterString(reader.readUTF().replace('%', ' '));
if (query.length() > 100) {
query = query.substring(0, 100);
}
List<MessengerBuddy> searchResults = new GapList<>();
if (query.length() > 1) {
try {
final PreparedStatement searchSth = Bootloader.getStorage().queryParams("SELECT id, nickname, figurecode, motto FROM players WHERE nickname LIKE ? LIMIT 50");
searchSth.setString(1, query + "%");
final ResultSet row = searchSth.executeQuery();
while (row.next()) {
final MessengerBuddy buddy = new MessengerBuddy();
buddy.set(row);
searchResults.add(buddy);
}
row.close();
} catch (final SQLException e) {
logger.error("SQL Exception", e);
}
}
final List<MessengerBuddy> nonFriends = new GapList<>();
final List<MessengerBuddy> friends = new GapList<>();
for (final MessengerBuddy buddy : searchResults) {
if (session.getPlayerMessenger().getBuddies().containsKey(buddy.getPlayerId())) {
friends.add(buddy);
} else {
nonFriends.add(buddy);
}
}
session.writeMessage(new MessengerSearchResultWriter(friends, nonFriends));
searchResults.clear();
}
}