@Override public CompletableFuture<PingSummary> execute() { final PingRequestDTO requestDTO = new PingRequestDTO(); requestDTO.setInetAddress(inetAddress); requestDTO.setPacketSize(packetSize); requestDTO.setTimeout(timeout); requestDTO.setRetries(retries); requestDTO.setLocation(location); requestDTO.setSystemId(systemId); if (numberOfRequests > 1) { return new MultiplePingExecutionStrategy(client, numberOfRequests, callback).execute(requestDTO); } return new SinglePingExecutionStrategy(client).execute(requestDTO); }
@Override public CompletableFuture<PingResponseDTO> execute(PingRequestDTO request) { final PingResultTracker tracker = new PingResultTracker(); try { pingerFactory.getInstance().ping( request.getInetAddress(), request.getTimeout(), request.getRetries(), request.getPacketSize(), 1, tracker); } catch (Exception e) { tracker.completeExceptionally(e); } return tracker; }
@Override public PingSummary call() throws Exception { final PingSummary pingSummary = new PingSummary(requestDTO.toPingRequest(), numberOfRequests); for (int sequenceId = 1; sequenceId <= numberOfRequests; sequenceId++) { if (completableFuture.isCancelled()) { return pingSummary; // terminate early } reportProgress(null, pingSummary); final CompletableFuture<PingSummary> singlePingFuture = new SinglePingExecutionStrategy(client).execute(requestDTO); try { final PingSummary singlePingSummary = singlePingFuture.get(requestDTO.getTimeToLiveMs(), TimeUnit.MILLISECONDS); final PingSequence newSequence = new PingSequence(sequenceId, singlePingSummary.getSequence(0).getResponse()); pingSummary.addSequence(newSequence); reportProgress(newSequence, pingSummary); } catch (ExecutionException | InterruptedException | TimeoutException e) { PingSequence newSequence = new PingSequence(sequenceId, e); pingSummary.addSequence(newSequence); reportProgress(newSequence, pingSummary); } } completableFuture.complete(pingSummary); return pingSummary; }