package uc.files;
import helpers.IObservable;
import helpers.StatusObject;
import java.io.File;
import java.net.InetAddress;
import java.util.Date;
import java.util.List;
import uc.IUser;
import uc.IStoppable.IStartable;
import uc.crypto.HashValue;
import uc.files.UploadQueue.TransferRecord;
import uc.files.UploadQueue.UploadInfo;
public interface IUploadQueue extends IObservable<StatusObject>, IStartable {
void start();
/**
* tells the uploadQueue when a User requested a file
*
* @param usr - which user
* @param nameOfTransferred - the name of the transferred
* @param hash - the hash corresponding to the name .. null if none (FileLists)
* @param gotASlot - if he got a slot for the upload
*/
void userRequestedFile(IUser usr, String nameOfTransferred, HashValue hash,
boolean gotASlot);
/**
* @param usr - the user that got some bytes uploaded..
* @param bytesServedToUser
*/
void transferFinished(File file, IUser usr, String nameOfTransferred,
HashValue hashOfTransferred, long bytesServedToUser,
Date startTime, long timeNeeded,InetAddress targetIP);
List<TransferRecord> getTransferRecords();
int getUploadRecordsSize();
long getTotalDuration();
long getTotalSize();
List<UploadInfo> getUploadInfos();
/**
* how many bytes the user transferred to us or from us..
* @param usr - which user..
* @return bytes transferred
*/
long getTotalTransferredOf(IUser usr);
/**
* total time transferring bytes cost on a per user base
* @param usr which user
* @return number of milliseconds
*/
long getTimeNeededOf(IUser usr);
}