package org.basex.server; import org.basex.util.*; import org.basex.util.hash.*; /** * This class delays blocked clients. * * @author BaseX Team 2005-17, BSD License * @author Christian Gruen */ public final class ClientBlocker { /** Temporarily blocked clients. */ private final TokenIntMap blocked = new TokenIntMap(); /** * Registers the client and delays the process. * @param client client address */ public synchronized void delay(final byte[] client) { int delay = blocked.get(client); delay = delay == -1 ? 1 : Math.min(delay, 1024) << 1; blocked.put(client, delay); for(int d = delay; d > 0; d--) Performance.sleep(100); } /** * Resets the login delay after successful login. * @param client client address */ public synchronized void remove(final byte[] client) { blocked.delete(client); } }