/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.merapi.helper.handlers;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Future;
import java.util.logging.Level;
import java.util.logging.Logger;
//import org.gudy.azureus2.core3.download.DownloadManager;
import org.gudy.azureus2.plugins.download.DownloadManager;
import org.gudy.azureus2.core3.global.GlobalManager;
import org.gudy.azureus2.core3.torrentdownloader.TorrentDownloaderCallBackInterface;
import org.gudy.azureus2.core3.torrentdownloader.TorrentDownloaderFactory;
//import org.gudy.azureus2.plugins.download.Download;
import org.torrent.data.FileInfo;
import org.torrent.transfer.Transfer;
//import org.torrent.internal.transfer.Download;
import org.gudy.azureus2.core3.torrentdownloader.TorrentDownloader;
import org.gudy.azureus2.core3.torrentdownloader.impl.TorrentDownloaderManager;
import org.merapi.handlers.MessageHandler;
import org.merapi.helper.messages.DLControlMessage;
import org.merapi.helper.messages.DLControlRespondMessage;
import org.merapi.helper.messages.ListUpdateMessage;
import org.merapi.messages.IMessage;
import org.torrent.client.MainService;
import org.torrent.internal.client.Main;
import org.torrent.internal.data.MetaInfoFile;
//import org.gudy.azureus2.pluginsimpl.locale.download.DownloadBridge;
//import org.gudy.azureus2.pluginsimpl.locale.download.DownloadManagerImpl;
/**
*
* @author gurkerl
*/
public class DLControlRequestHandler extends MessageHandler {
private static File file;
private MainService service;
/**
* Default-Konstruktor, der nicht au�erhalb dieser Klasse aufgerufen werden
* kann
*/
private GlobalManager _gm;
private DownloadManager _dlmgr;
// public DLControlRequestHandler(GlobalManager gm, DownloadManager dl) {
// super(DLControlMessage.DL_CONTROL);
//// service = new Main();
// this._gm = gm;
// }
public DLControlRequestHandler() {
// super(DLControlMessage.DL_CONTROL);
}
// public DLControlRequestHandler(GlobalManager gm, org.gudy.azureus2.plugins.download.DownloadManager dlmgr) {
// super(DLControlMessage.DL_CONTROL);
//// service = new Main();
// this._gm = gm;
// _dlmgr = dlmgr;
// }
@Override
public void handleMessage(IMessage message) {
if (message instanceof DLControlMessage) {
System.out.println("DLControlMessage received on backend (globalmanager)");
DLControlMessage downloadControlMessage = (DLControlMessage) message;
if (downloadControlMessage.action.equals(DLControlMessage.LOCAL_FILE)) {
file = new File(downloadControlMessage.fileName);
FileOutputStream fop = null;
try {
fop = new FileOutputStream(file);
} catch (FileNotFoundException ex) {
Logger.getLogger(DLControlRequestHandler.class.getName()).log(
Level.SEVERE, null, ex);
}
if (file.exists()) {
try {
fop.write(downloadControlMessage.fileData);
} catch (IOException ex) {
Logger.getLogger(DLControlRequestHandler.class.getName()).log(Level.SEVERE, null, ex);
}
try {
fop.flush();
} catch (IOException ex) {
Logger.getLogger(DLControlRequestHandler.class.getName()).log(Level.SEVERE, null, ex);
}
try {
fop.close();
} catch (IOException ex) {
Logger.getLogger(DLControlRequestHandler.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println("The data has been written");
}
} else if (downloadControlMessage.action.equals(DLControlMessage.REMOTE_FILE)) {
System.out.println("Download Remote Torrent triggered");
// downloadRemoteTorrent(downloadControlMessage.fileReference);
return;
}
} else {
System.out.println("invalid message received on backend");
return;
}
System.out.println("absolute file: " + file.getAbsoluteFile());
System.out.println("absolute path: " + file.getAbsolutePath());
try {
// Future<Download> dl = Main.getInstance().starter(file.getAbsolutePath());
Future<Transfer> dl = Main.getInstance().starter(file.getAbsolutePath());
// DownloadBridge dlmgr = (DownloadBridge) _dlmgr;
// dlmgr.addExternalDownload(dl);
// _dlmgr.resumeDownloads();
// DownloadManager dlmgr = _gm.addDownloadManager(file.getAbsolutePath(), "C:\\Development\\testDownloads\\");
// _gm.resumeDownload(dlmgr);
// Main.getInstance().startTorrentTask(file.getAbsolutePath());
} catch (IOException e) {
// // TODO Auto-generated catch block
e.printStackTrace();
}
}
// @Override
// public File getFile() {
// return this.file;
// }
public void sendListUpdateMessage(String action, String infoHash) {
ListUpdateMessage updateMessage = new ListUpdateMessage();
updateMessage.action = action;
updateMessage.infoHash = infoHash;
updateMessage.send();
}
public static void sendDLControlRespondMessage(String action, String infoHash, String name, long size, int cols, int rows,
long l, long m, long n, long o, long progress) {
DLControlRespondMessage dlControlRespondMessage = new DLControlRespondMessage();
dlControlRespondMessage.action = action;
dlControlRespondMessage.infoHash = infoHash;
dlControlRespondMessage.name = name;
dlControlRespondMessage.size = size;
dlControlRespondMessage.cols = cols;
dlControlRespondMessage.rows = rows;
//evtl nach ListUpdateMessage
dlControlRespondMessage.ldB = l;
dlControlRespondMessage.ldT = m;
dlControlRespondMessage.luB = n;
dlControlRespondMessage.luT = o;
dlControlRespondMessage.progress = progress;
System.out.println("Progress:" + progress);
dlControlRespondMessage.send();
}
public static void sendDLControlRespondMessage(String action, String infoHash, ArrayList<FileInfo> files) {
DLControlRespondMessage dlControlRespondMessage = new DLControlRespondMessage();
dlControlRespondMessage.action = action;
dlControlRespondMessage.infoHash = infoHash;
dlControlRespondMessage.files = files;
dlControlRespondMessage.send();
}
public static void sendDLControlRespondMessage(String action, String infoHash, ArrayList<FileInfo> files, MetaInfoFile mif) {
DLControlRespondMessage dlControlRespondMessage = new DLControlRespondMessage();
dlControlRespondMessage.action = action;
dlControlRespondMessage.infoHash = infoHash;
dlControlRespondMessage.files = files;
dlControlRespondMessage.mif = mif;
dlControlRespondMessage.send();
}
/**
* downloads the remote torrent file. once we have downloaded the .torrent file, we
* pass the data to the downloadTorrent() method for further processing
* @param url
* @param outputDir
*/
private void downloadRemoteTorrent(String url) {
TorrentDownloader downloader = TorrentDownloaderFactory.create(new TorrentDownloaderCallBackInterface() {
public void TorrentDownloaderEvent(int state, TorrentDownloader inf) {
if( state == TorrentDownloader.STATE_FINISHED )
{
System.out.println("torrent file download complete. starting torrent");
TorrentDownloaderManager.getInstance().remove(inf);
try {
// Future<Download> dl = Main.getInstance().starter(inf.getFile().getAbsolutePath());
Future<Transfer> dl = Main.getInstance().starter(inf.getFile().getAbsolutePath());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// downloadTorrent( inf.getFile().getAbsolutePath(), outputDir.getAbsolutePath() );
}
else
TorrentDownloaderManager.getInstance().TorrentDownloaderEvent(state, inf);
}
}, url, null, null, true);
TorrentDownloaderManager.getInstance().add(downloader);
}
}