package net.minecraft.network; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import cpw.mods.fml.common.FMLLog; import net.minecraft.crash.CrashReport; import net.minecraft.server.MinecraftServer; import net.minecraft.util.ReportedException; public abstract class NetworkListenThread { /** Reference to the logger. */ public static Logger logger = Logger.getLogger("Minecraft"); /** Reference to the MinecraftServer object. */ private final MinecraftServer mcServer; private final List connections = Collections.synchronizedList(new ArrayList()); /** Whether the network listener object is listening. */ public volatile boolean isListening = false; public NetworkListenThread(MinecraftServer par1MinecraftServer) throws IOException { this.mcServer = par1MinecraftServer; this.isListening = true; } /** * adds this connection to the list of currently connected players */ public void addPlayer(NetServerHandler par1NetServerHandler) { this.connections.add(par1NetServerHandler); } public void stopListening() { this.isListening = false; } /** * processes packets and pending connections */ public void networkTick() { for (int var1 = 0; var1 < this.connections.size(); ++var1) { NetServerHandler var2 = (NetServerHandler)this.connections.get(var1); try { var2.networkTick(); } catch (Exception var5) { if (var2.netManager instanceof MemoryConnection) { CrashReport var4 = CrashReport.makeCrashReport(var5, "Ticking memory connection"); throw new ReportedException(var4); } FMLLog.log(Level.SEVERE, var5, "A critical server error occured handling a packet, kicking %s", var2.getPlayer().entityId); logger.log(Level.WARNING, "Failed to handle packet for " + var2.playerEntity.getEntityName() + "/" + var2.playerEntity.func_71114_r() + ": " + var5, var5); var2.kickPlayerFromServer("Internal server error"); } if (var2.connectionClosed) { this.connections.remove(var1--); } var2.netManager.wakeThreads(); } } public MinecraftServer getServer() { return this.mcServer; } }