package org.mariadb.jdbc.failover; import org.mariadb.jdbc.internal.logging.Logger; import org.mariadb.jdbc.internal.logging.LoggerFactory; import java.io.IOException; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; public class TcpProxy { private static Logger logger = LoggerFactory.getLogger(TcpProxy.class); String host; int remoteport; TcpProxySocket socket; /** * Initialise proxy. * * @param host host (ip / dns) * @param remoteport port * @throws IOException exception */ public TcpProxy(String host, int remoteport) throws IOException { this.host = host; this.remoteport = remoteport; socket = new TcpProxySocket(host, remoteport); Executors.newSingleThreadScheduledExecutor().schedule(socket, 0, TimeUnit.MILLISECONDS); } public void stop() { socket.kill(); } /** * Stop proxy and restart after X milliseconds. * * @param sleepTime sleep time in milliseconds */ public void restart(long sleepTime) { socket.kill(); logger.trace("host proxy port " + socket.localport + " for " + host + " started"); Executors.newSingleThreadScheduledExecutor().schedule(socket, sleepTime, TimeUnit.MILLISECONDS); } /** * Restart proxy. */ public void restart() { Executors.newSingleThreadExecutor().execute(socket); try { Thread.sleep(10); } catch (InterruptedException e) { //eat Exception } } /** * Assure that proxy is in a stable status. */ public void assureProxyOk() { if (socket.isClosed()) { restart(); } } public int getLocalPort() { return socket.getLocalPort(); } }