/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.pieShare.pieShareApp.task.eventTasks;
import java.io.File;
import org.pieShare.pieShareApp.model.message.api.IFileRequestMessage;
import org.pieShare.pieShareApp.model.message.api.IMetaMessage;
import org.pieShare.pieShareApp.service.shareService.CouldNotCreateMetaDataException;
import org.pieShare.pieShareApp.service.shareService.IBitTorrentService;
import org.pieShare.pieShareApp.service.shareService.IShareService;
import org.pieShare.pieShareApp.service.shareService.NoLocalFileException;
import org.pieShare.pieShareApp.task.AMessageSendingEventTask;
import org.pieShare.pieTools.piePlate.service.cluster.exception.ClusterManagmentServiceException;
import org.pieShare.pieTools.pieUtilities.service.pieLogger.PieLogger;
/**
*
* @author Svetoslav
*/
public class FileRequestTask extends AMessageSendingEventTask<IFileRequestMessage> {
private IShareService shareService;
private IBitTorrentService bitTorrentService;
public void setBitTorrentService(IBitTorrentService bitTorrentService) {
this.bitTorrentService = bitTorrentService;
}
public void setShareService(IShareService shareService) {
this.shareService = shareService;
}
@Override
public void run() {
//todo: send to all or send only to the requesting client?
//todo: if i am currently receiving the file I need to forwared the MetaMessage of the sharing instance!
try {
File localTmpFile = this.shareService.prepareFile(this.msg.getPieFile());
byte[] meta = this.bitTorrentService.createMetaInformation(localTmpFile);
IMetaMessage metaMsg = this.messageFactoryService.getFileTransferMetaMessage();
metaMsg.setMetaInfo(meta);
metaMsg.setPieFile(this.msg.getPieFile());
PieLogger.trace(this.getClass(), "Sending meta for {} with HashCode {} "
+ "including PieFile with HashCode {}.",
metaMsg.getFileMeta().getFile().getFileName(),
metaMsg.getFileMeta().hashCode(),
metaMsg.getFileMeta().getFile().hashCode());
this.setDefaultAdresse(metaMsg);
this.clusterManagementService.sendMessage(metaMsg);
} catch (ClusterManagmentServiceException ex) {
PieLogger.error(this.getClass(), "Could not send MetaMessage!", ex);
} catch (NoLocalFileException | CouldNotCreateMetaDataException ex) {
PieLogger.error(this.getClass(), ex.getMessage(), ex);
}
}
}