package org.openslx.satellitedaemon.filetransfer; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; import org.openslx.filetransfer.Downloader; import org.openslx.filetransfer.FileRange; import org.openslx.filetransfer.WantRangeCallback; import org.openslx.imagemaster.thrift.iface.DownloadData; import org.openslx.satellitedaemon.Globals; import org.openslx.satellitedaemon.db.DbImage; public class FileDownloadWorker implements Runnable { private static Logger log = Logger.getLogger(FileDownloadWorker.class); @Override public void run() { while (true) { List imageList = DbImage.getAllMarkedForDownload(); log.info("imageList Contains " + imageList.size() + " items."); for (final DbImage image : imageList) { List range = new ArrayList(); for (long i = 0; i < (image.fileSize / Globals.BLOCKSIZE); i++) { range.add((int) i); } DownloadData downInfos = ThriftConnection.getDownloadInfos(image); if (downInfos == null) { log.error("The DownloadInfos returned by ThriftConnection class are null"); continue; } // create new instance of Downloader. Downloader d; try { d = new Downloader(Globals.getMasterserverHost(), downInfos.port, Globals.getMasterServerSslContext(), downInfos.token); } catch (IOException e) { e.printStackTrace(); continue; } // start downloading process. d.download(Globals.getImageFolder() + "/" + image.path, new WantRangeCallback() { long pos = 0; long size = image.fileSize; @Override public FileRange get() { // get start of range. if (pos >= size) return null; long startOfRange = pos; long endOfRange = Math.min(pos + Globals.BLOCKSIZE, image.fileSize); FileRange range = new FileRange(startOfRange, endOfRange); pos += Globals.BLOCKSIZE; return range; } }); } try { Thread.sleep(5 * 60 * 1000); } catch (InterruptedException e) { Thread.currentThread().interrupt(); return; } } } }