| package protocolsupport.protocol.storage; |
| |
| import java.net.InetAddress; |
| |
| import org.bukkit.Bukkit; |
| |
| import it.unimi.dsi.fastutil.longs.LongIterator; |
| import it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap; |
| import protocolsupport.utils.Utils; |
| |
| public class ThrottleTracker { |
| |
| protected static final long time = Bukkit.getConnectionThrottle(); |
| |
| protected static final Object2LongOpenHashMap<InetAddress> tracker = new Object2LongOpenHashMap<>(); |
| static { |
| tracker.defaultReturnValue(-1); |
| } |
| |
| public static boolean isEnabled() { |
| return time > 0; |
| } |
| |
| public static boolean throttle(InetAddress address) { |
| synchronized (tracker) { |
| long ctime = Utils.currentTimeMillisFromNanoTime(); |
| LongIterator iterator = tracker.values().iterator(); |
| while (iterator.hasNext()) { |
| if (iterator.nextLong() < ctime) { |
| iterator.remove(); |
| } |
| } |
| long ret = tracker.put(address, ctime + time); |
| return ret != tracker.defaultReturnValue(); |
| } |
| } |
| |
| } |