package com.ingotpowered; import com.ingotpowered.net.packets.play.Packet0KeepAlive; import java.util.Collection; import java.util.Iterator; import java.util.Random; public class ThreadKeepAlive extends Thread { public Random random = new Random(System.currentTimeMillis()); public void run() { while (true) { try { Thread.sleep(11000); } catch (Exception ex) { break; } Collection<IngotPlayer> players = IngotServer.server.playerMap.values(); Iterator<IngotPlayer> iterator = players.iterator(); while (iterator.hasNext()) { IngotPlayer p = iterator.next(); if (System.currentTimeMillis() - p.packetHandler.pingSentTimestamp >= 30000) { p.kick("Did not respond to ping in time"); continue; } if (p.packetHandler.waitingPingId > 0) { continue; } p.packetHandler.waitingPingId = random.nextInt(); p.channel.pipeline().writeAndFlush(new Packet0KeepAlive(p.packetHandler.waitingPingId)).syncUninterruptibly(); p.packetHandler.pingSentTimestamp = System.currentTimeMillis(); } } System.out.println("Player keep-alive thread shut down."); } }