public void doOptimization(ReconnectResult res, ProcessCallBackAdapter processCallBackAdapter) throws InterruptedException { java.util.List<ReconnectResult> list = new ArrayList<ReconnectResult>(); list.add(res); // int failed = 0; int success = 1; long duration = res.getSuccessDuration(); long offlineDuration = res.getOfflineDuration(); long maxOfflineDuration = res.getOfflineDuration(); long maxSuccessDuration = res.getSuccessDuration(); long startTime = res.getStartTime(); for (int i = 1; i < JsonConfig.create(ReconnectConfig.class).getOptimizationRounds(); i++) { processCallBackAdapter.setProgress(this, (i * 100) / JsonConfig.create(ReconnectConfig.class).getOptimizationRounds()); ReconnectResult r; try { r = validate(); } catch (ReconnectException e) { e.printStackTrace(); r = createReconnectResult(); } list.add(r); if (r.isSuccess()) { success++; duration += r.getSuccessDuration(); startTime = r.getStartTime(); offlineDuration = Math.min(offlineDuration, r.getOfflineDuration()); maxOfflineDuration = Math.max(maxOfflineDuration, r.getOfflineDuration()); maxSuccessDuration = Math.max(maxSuccessDuration, r.getSuccessDuration()); } } duration /= success; double successRate = success / (double) JsonConfig.create(ReconnectConfig.class).getOptimizationRounds(); // increase successduration if successrate is lower than 1.0 (100%) res.setAverageSuccessDuration((long) (duration / successRate)); res.setMaxOfflineDuration(maxOfflineDuration * 2); res.setMaxSuccessDuration(maxSuccessDuration * 4); res.setOfflineTime(offlineDuration); res.setStartTime(startTime); }