diff --git a/src/main/java/ChunkStatus.java b/src/java/ChunkStatus.java similarity index 100% rename from src/main/java/ChunkStatus.java rename to src/java/ChunkStatus.java diff --git a/src/main/java/ChunkUtils.java b/src/java/ChunkUtils.java similarity index 100% rename from src/main/java/ChunkUtils.java rename to src/java/ChunkUtils.java diff --git a/src/main/java/ConfigReader.java b/src/java/ConfigReader.java similarity index 100% rename from src/main/java/ConfigReader.java rename to src/java/ConfigReader.java diff --git a/src/main/java/DownloadConfig.java b/src/java/DownloadConfig.java similarity index 100% rename from src/main/java/DownloadConfig.java rename to src/java/DownloadConfig.java diff --git a/src/main/java/DownloadWorker.java b/src/java/DownloadWorker.java similarity index 57% rename from src/main/java/DownloadWorker.java rename to src/java/DownloadWorker.java index 546de2d..3c1082a 100644 --- a/src/main/java/DownloadWorker.java +++ b/src/java/DownloadWorker.java @@ -22,22 +22,45 @@ public class DownloadWorker implements Runnable { @Override public void run() { // TODO: Record the chunk start time in chunkStatus. + chunkStatus.setStartTimeMs(System.currentTimeMilliS()) ; double downloaded = 0.0; // TODO: Print a message that this chunk has started downloading. + System.out.println(Thread.currentThread().getName() + " started downloading Chunk #" + chunkStatus.getChunkId()); while (downloaded < chunkStatus.getChunkSizeMB()) { // TODO: Generate a random sleep delay between min and max delay. + int minDelay = config.getMinStepDelayMs() ; + int maxDelay = config.getMaxStepDalayMs() ; + int delay = minDelay + random.nextInt(maxDelay-minDelay +1) ; + // TODO: Sleep for that delay. + Thread.sleep(delay) ; // TODO: Generate a random download amount for this step. + double minStep = config.getMinStepDownloadMB() ; + double maxStep = config.getMaxStepDownloadMB() ; + double stepDownload = minStep + ((maxStep-minStep)*random.nextDouble()) ; + + // TODO: Increase downloaded, but do not go beyond chunk size. + downloaded += stepDownload ; + if (downloaded > chunkStatus.getChunkSizeMB()) + { + downloaded = chunkStatus.getChunkSizeMB() ; + } + // TODO: Save the updated downloaded value into chunkStatus. + chunkStatus.setDownloadedMB(downloaded) ; // TODO: Optionally print step-by-step progress. } + // TODO: Mark the chunk as completed. + chunkStatus.setCompleted(true ); // TODO: Record the chunk end time in chunkStatus. + chunkStatus.setEndTimeMs(System.currentTimeMillis()) ; // TODO: Print a message that this chunk has finished downloading. + System.out.println(Thread.currentThread().getName() + " finished downloading Chunk #" + chunkStatus.getChunkId()); } } diff --git a/src/main/java/Main.java b/src/java/Main.java similarity index 100% rename from src/main/java/Main.java rename to src/java/Main.java diff --git a/src/main/java/ProgressMonitor.java b/src/java/ProgressMonitor.java similarity index 99% rename from src/main/java/ProgressMonitor.java rename to src/java/ProgressMonitor.java index 475c0e0..3e5dc2f 100644 --- a/src/main/java/ProgressMonitor.java +++ b/src/java/ProgressMonitor.java @@ -27,6 +27,7 @@ public class ProgressMonitor implements Runnable { // 6. Otherwise sleep for monitorDelayMs and continue + while (true) { double totalDownloadedMB = 0.0; int completedChunks = 0; diff --git a/src/main/resources/download_config.txt b/src/resources/download_config.txt similarity index 100% rename from src/main/resources/download_config.txt rename to src/resources/download_config.txt