Extract "char list" from Client to handler
This commit is contained in:
@@ -27,7 +27,6 @@ import constants.id.MapId;
|
||||
import io.netty.channel.ChannelHandlerContext;
|
||||
import io.netty.channel.ChannelInboundHandlerAdapter;
|
||||
import io.netty.handler.timeout.IdleStateEvent;
|
||||
import model.CharacterIdentity;
|
||||
import net.PacketHandler;
|
||||
import net.PacketProcessor;
|
||||
import net.netty.DisconnectException;
|
||||
@@ -302,40 +301,6 @@ public class Client extends ChannelInboundHandlerAdapter {
|
||||
return new AbstractPlayerInteraction(this);
|
||||
}
|
||||
|
||||
public void sendCharList(int server) {
|
||||
this.sendPacket(PacketCreator.getCharList(this, server, 0));
|
||||
}
|
||||
|
||||
public List<Character> loadCharacters(int serverId) {
|
||||
List<Character> chars = new ArrayList<>(15);
|
||||
try {
|
||||
for (CharacterIdentity cni : loadCharactersInternal(serverId)) {
|
||||
chars.add(Character.loadCharFromDB(cni.id(), this, false));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return chars;
|
||||
}
|
||||
|
||||
private List<CharacterIdentity> loadCharactersInternal(int worldId) {
|
||||
List<CharacterIdentity> chars = new ArrayList<>(15);
|
||||
try (Connection con = DatabaseConnection.getConnection();
|
||||
PreparedStatement ps = con.prepareStatement("SELECT id, name FROM characters WHERE accountid = ? AND world = ?")) {
|
||||
ps.setInt(1, this.getAccID());
|
||||
ps.setInt(2, worldId);
|
||||
|
||||
try (ResultSet rs = ps.executeQuery()) {
|
||||
while (rs.next()) {
|
||||
chars.add(new CharacterIdentity(rs.getString("name"), rs.getInt("id")));
|
||||
}
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return chars;
|
||||
}
|
||||
|
||||
public boolean isLoggedIn() {
|
||||
return loggedIn;
|
||||
}
|
||||
|
||||
@@ -21,14 +21,25 @@
|
||||
*/
|
||||
package net.server.handlers.login;
|
||||
|
||||
import client.Character;
|
||||
import client.Client;
|
||||
import model.CharacterIdentity;
|
||||
import net.AbstractPacketHandler;
|
||||
import net.packet.InPacket;
|
||||
import net.packet.Packet;
|
||||
import net.server.Server;
|
||||
import net.server.channel.Channel;
|
||||
import net.server.world.World;
|
||||
import tools.DatabaseConnection;
|
||||
import tools.PacketCreator;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public final class CharlistRequestHandler extends AbstractPacketHandler {
|
||||
|
||||
@Override
|
||||
@@ -51,6 +62,42 @@ public final class CharlistRequestHandler extends AbstractPacketHandler {
|
||||
|
||||
c.setWorld(world);
|
||||
c.setChannel(channel);
|
||||
c.sendCharList(world);
|
||||
sendChrList(c, world);
|
||||
}
|
||||
}
|
||||
|
||||
private void sendChrList(Client c, int worldId) {
|
||||
List<Character> chrs = loadChrs(c, worldId);
|
||||
Packet charListPacket = PacketCreator.getCharList(c, chrs, 0);
|
||||
c.sendPacket(charListPacket);
|
||||
}
|
||||
|
||||
private List<Character> loadChrs(Client c, int worldId) {
|
||||
List<Character> chars = new ArrayList<>();
|
||||
try {
|
||||
for (CharacterIdentity identity : loadChrIdentities(c.getAccID(), worldId)) {
|
||||
chars.add(Character.loadCharFromDB(identity.id(), c, false));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return chars;
|
||||
}
|
||||
|
||||
private List<CharacterIdentity> loadChrIdentities(int accountId, int worldId) {
|
||||
List<CharacterIdentity> chars = new ArrayList<>(15);
|
||||
try (Connection con = DatabaseConnection.getConnection();
|
||||
PreparedStatement ps = con.prepareStatement("SELECT id, name FROM characters WHERE accountid = ? AND world = ?")) {
|
||||
ps.setInt(1, accountId);
|
||||
ps.setInt(2, worldId);
|
||||
|
||||
try (ResultSet rs = ps.executeQuery()) {
|
||||
while (rs.next()) {
|
||||
chars.add(new CharacterIdentity(rs.getString("name"), rs.getInt("id")));
|
||||
}
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return chars;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -859,14 +859,11 @@ public class PacketCreator {
|
||||
* <br> 17: Wrong gateway or personal info<br>
|
||||
* <br> 21: Verify account via email<br>
|
||||
*/
|
||||
public static Packet getCharList(Client c, int serverId, int status) {
|
||||
public static Packet getCharList(Client c, List<Character> chars, int status) {
|
||||
final OutPacket p = OutPacket.create(SendOpcode.CHARLIST);
|
||||
p.writeByte(status);
|
||||
List<Character> chars = c.loadCharacters(serverId);
|
||||
p.writeByte((byte) chars.size());
|
||||
for (Character chr : chars) {
|
||||
addCharEntry(p, chr, false);
|
||||
}
|
||||
chars.forEach(chr -> addCharEntry(p, chr, false));
|
||||
|
||||
p.writeByte(YamlConfig.config.server.ENABLE_PIC && !c.canBypassPic() ? (c.getPic() == null || c.getPic().equals("") ? 0 : 1) : 2);
|
||||
p.writeInt(YamlConfig.config.server.COLLECTIVE_CHARSLOT ? chars.size() + c.getAvailableCharacterSlots() : c.getCharacterSlots());
|
||||
|
||||
Reference in New Issue
Block a user