package handling.login.handler;
import client.MapleClient;
import constants.WorldConstants;
import handling.channel.ChannelServer;
import handling.world.World;
import java.util.List;
import tools.FileoutputUtil;
import tools.MaplePacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
import tools.packet.LoginPacket;
public class CharlistRequestHandler {
public static void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
if (!c.isLoggedIn()) {
c.getSession().close(true);
return;
}
int server = slea.readByte();
int channel = slea.readByte() + 1;
if (!World.isChannelAvailable(channel) || !WorldConstants.isExists(server)) {
c.getSession().write(LoginPacket.getLoginFailed(10)); //cannot process so many
return;
}
if (!WorldConstants.getById(server).isAvailable() && !(c.isGm() && server == WorldConstants.gmserver)) {
c.getSession().write(MaplePacketCreator.serverMessageNotice("很抱歉, " + WorldConstants.getNameById(server) + "暂时未开放。\r\n请尝试连接其他服务器。"));
c.getSession().write(LoginPacket.getLoginFailed(1)); //Shows no message, but it is used to unstuck
return;
}
FileoutputUtil.log("[连接信息] "+c.getSession().getRemoteAddress().toString().split(":")[0] + " 连接到世界服务器: " + server + " 频道: " + channel);
List chars = c.loadCharacters(server);
if ((chars != null) && (ChannelServer.getInstance(channel) != null)) {
c.setWorld(server);
c.setChannel(channel);
c.getSession().write(LoginPacket.getCharList(c.getSecondPassword(), chars, c.getAccCharSlots()));
} else {
c.getSession().close(true);
}
}
}