package cn.liutils.check;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javax.swing.RowFilter.Entry;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.server.MinecraftServer;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.PlayerEvent.PlayerLoggedInEvent;
import cpw.mods.fml.common.gameevent.PlayerEvent.PlayerLoggedOutEvent;
import cpw.mods.fml.common.gameevent.TickEvent.Phase;
import cpw.mods.fml.common.gameevent.TickEvent.ServerTickEvent;
/**
* @author EAirPeter
*/
public final class HandlerServer {
private static final int TIMEOUT = 60;
private final Map<String, Integer> map = new HashMap<String, Integer>();
void processPlayer(EntityPlayerMP player, boolean passed) {
if (passed)
synchronized (map) {
map.remove(player.getCommandSenderName());
}
else
player.playerNetServerHandler.kickPlayerFromServer("Verification failed");
}
@SubscribeEvent
public void onPlayerLoggedIn(PlayerLoggedInEvent event) {
String name = event.player.getCommandSenderName();
if (map.containsKey(name))
throw new IllegalStateException("Duplicated login");
synchronized (map) {
map.put(name, TIMEOUT);
}
ResourceCheck.sRequestCheck(event.player);
}
@SubscribeEvent
public void onPlayerLoggedOut(PlayerLoggedOutEvent event) {
String name = event.player.getCommandSenderName();
if (map.containsKey(name))
synchronized (map) {
map.remove(name);
}
}
@SubscribeEvent
public void onServerTickEvent(ServerTickEvent event) {
if (event.phase == Phase.END)
return;
synchronized (map) {
for (Iterator<String> i = map.keySet().iterator(); i.hasNext(); ) {
String name = i.next();
int timer = map.get(name);
if (--timer == 0) {
MinecraftServer.getServer().getConfigurationManager().func_152612_a(name).playerNetServerHandler.kickPlayerFromServer("Verification timeout");
i.remove();
}
else
map.put(name, timer);
}
}
}
private static HandlerServer INSTANCE = null;
HandlerServer() {
if (INSTANCE == null)
INSTANCE = this;
else
throw new IllegalStateException("Only one HandlerServer is allowed");
}
}