package handling.login;
import client.MapleClient;
import database.DatabaseConnection;
import handling.channel.ChannelServer;
import handling.login.handler.ServerlistRequestHandler;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Map;
import java.util.Map.Entry;
import tools.FileoutputUtil;
import tools.MaplePacketCreator;
import tools.packet.LoginPacket;
public class LoginWorker {
private static long lastUpdate = 0L;
public static void registerClient(final MapleClient c) {
if ((LoginServer.isAdminOnly()) && (!c.isGm()) && (!c.isLocalhost())) {
c.getSession().write(MaplePacketCreator.serverMessageNotice("当前服务器设置只能管理员进入游戏.\r\n我们目前在修复几个问题.\r\n请稍后再试."));
c.getSession().write(LoginPacket.getLoginFailed(16));
return;
}
updateChannel(c);
if (c.finishLogin() != 0) {
c.getSession().write(LoginPacket.getLoginFailed(7));
return;
}
FileoutputUtil.log("登录成功,准备通知客户端!!!!");
c.getSession().write(LoginPacket.getAuthSuccessRequest(c));
// c.getSession().write(LoginPacket.checkUserLimit());
//c.getSession().write(MaplePacketCreator.serverNotice(1, "恭喜您成功登陆!\r\n您的账户中有 " + c.getJinQuan() + " 张金券\r\n祝您游戏愉快"));
ServerlistRequestHandler.handlePacket(c, false);
// try (PreparedStatement ps = DatabaseConnection.getConnection().prepareStatement("INSERT INTO accounts_log (accid, accname, ip, macs) VALUES (?, ?, ?, ?)")) {
// ps.setInt(1, c.getAccID());
// ps.setString(2, c.getAccountName());
// ps.setString(3, c.getSession().getRemoteAddress().toString());
// ps.setString(4, c.getMac());
// ps.executeUpdate();
// ps.close();
// } catch (SQLException e) {
// FileoutputUtil.outputFileError(FileoutputUtil.SQL_ScriptEx_Log, e);
// }
}
public static void updateChannel(final MapleClient c) {
if (System.currentTimeMillis() - lastUpdate > 10 * 60 * 1000) {
lastUpdate = System.currentTimeMillis();
Map<Integer, Integer> load = ChannelServer.getChannelLoad();
int usersOn = 0;
if (load.size() <= 0) {
lastUpdate = 0;
c.getSession().write(LoginPacket.getLoginFailed(7));
return;
}
double loadFactor = LoginServer.getUserLimit() / load.size(); // 每个频道人数
for (Entry<Integer, Integer> entry : load.entrySet()) {
load.put(entry.getKey(), Math.min(255, (int) (entry.getValue() / loadFactor * 255)));
}
LoginServer.setLoad(load, usersOn);
lastUpdate = System.currentTimeMillis();
}
}
}