package mediabrowser.apiinteraction.connectionmanager; import mediabrowser.apiinteraction.ConnectionResult; import mediabrowser.apiinteraction.Response; import mediabrowser.model.apiclient.ConnectionMode; import mediabrowser.model.apiclient.ConnectionOptions; import mediabrowser.model.apiclient.ServerInfo; import mediabrowser.model.logging.ILogger; import mediabrowser.model.system.PublicSystemInfo; import java.util.ArrayList; import java.util.Date; /** * Created by Luke on 2/21/2015. */ public class TestNextConnectionModeTryConnectResponse extends Response<PublicSystemInfo> { private ConnectionManager connectionManager; private ServerInfo server; private ArrayList<ConnectionMode> tests; private ConnectionMode mode; private String address; private int finalTimeout; private ConnectionOptions options; private int index; private boolean isLocalNetworkAvailable; private long wakeOnLanSendTime; private boolean finalEnableRetry; private ILogger logger; private Response<ConnectionResult> response; public TestNextConnectionModeTryConnectResponse(ConnectionManager connectionManager, ServerInfo server, ArrayList<ConnectionMode> tests, ConnectionMode mode, String address, int finalTimeout, ConnectionOptions options, int index, boolean isLocalNetworkAvailable, long wakeOnLanSendTime, boolean finalEnableRetry, ILogger logger, Response<ConnectionResult> response) { this.connectionManager = connectionManager; this.server = server; this.tests = tests; this.mode = mode; this.address = address; this.finalTimeout = finalTimeout; this.options = options; this.index = index; this.isLocalNetworkAvailable = isLocalNetworkAvailable; this.wakeOnLanSendTime = wakeOnLanSendTime; this.finalEnableRetry = finalEnableRetry; this.logger = logger; this.response = response; } @Override public void onResponse(PublicSystemInfo result) { connectionManager.OnSuccessfulConnection(server, result, mode, options, response); } @Override public void onError(Exception ex) { if (finalEnableRetry){ long sleepTime = 10000 - (System.currentTimeMillis() - wakeOnLanSendTime); if (sleepTime > 0){ try { Thread.sleep(sleepTime, 0); } catch (InterruptedException e) { logger.ErrorException("Error in Thread.Sleep", e); } } connectionManager.TryConnect(address, finalTimeout, new TryConnectRetryResponse(connectionManager, server, tests, mode, options, index, isLocalNetworkAvailable, wakeOnLanSendTime, response)); } else{ connectionManager.TestNextConnectionMode(tests, index + 1, isLocalNetworkAvailable, server, wakeOnLanSendTime, options, response); } } }