package handling.login;
import clientside.MapleClient;
import handling.channel.ChannelServer;
import handling.login.handler.CharLoginHandler;
import java.util.Map;
import java.util.Map.Entry;
import server.Timer;
import tools.packet.LoginPacket;
public class LoginWorker {
private static long lastUpdate = 0L;
public static void registerClient(final MapleClient c) {
if (System.currentTimeMillis() - lastUpdate > 600000L) {
lastUpdate = System.currentTimeMillis();
Map<Integer, Integer> load = ChannelServer.getChannelLoad();
int usersOn = 0;
if ((load == null) || (load.size() <= 0)) {
lastUpdate = 0L;
c.getSession().write(LoginPacket.getLoginFailed(7));
return;
}
double loadFactor = 1200.0D / (LoginServer.getUserLimit() / load.size());
for (Entry<Integer, Integer> entry : load.entrySet()) {
usersOn += ((Integer) entry.getValue()).intValue();
load.put(entry.getKey(), Integer.valueOf(Math.min(1200, (int) (((Integer) entry.getValue()).intValue() * loadFactor))));
}
LoginServer.setLoad(load, usersOn);
lastUpdate = System.currentTimeMillis();
}
if (c.finishLogin() == 0) {
c.getSession().write(LoginPacket.getAuthSuccessRequest(c));
CharLoginHandler.ServerListRequest(c);
c.setIdleTask(Timer.PingTimer.getInstance().schedule(new Runnable() {
@Override
public void run() {
c.getSession().close(true);
}
}, 6000000L));
} else {
c.getSession().write(LoginPacket.getLoginFailed(7));
}
}
}