package com.limegroup.gnutella.uploader; import com.limegroup.gnutella.BandwidthTracker; import com.limegroup.gnutella.InsufficientDataException; /** * Defines an interface for the logic of managing BT uploads and HTTP Uploads. * More information available see * http://wiki.limewire.org/index.php?title=Upload_Slots_And_BT */ public interface UploadSlotManager extends BandwidthTracker { /** * Polls for an available upload slot. (HTTP-style) * * @param user the user that will use the upload slot * @param queue if the user can enter the queue * @param highPriority if the user needs an upload slot now or never * @return the position in the queue if queued, -1 if rejected, * 0 if it can proceed immediately */ public int pollForSlot(UploadSlotUser user, boolean queue, boolean highPriority); /** * Requests an upload slot. (BT-style) * * @param listener the listener that should be notified when a slot * becomes available * @param highPriority if the user needs an upload slot now or never * @return the position of the upload if queued, -1 if rejected, 0 if * it can proceed immediately. */ public int requestSlot(UploadSlotListener listener, boolean highPriority); public int positionInQueue(UploadSlotUser user); /** * @return whether there is a free slot for an HTTP uploader. */ public boolean hasHTTPSlot(int current); /** * @return true if there may be a free slot for an HTTP uploader. */ public boolean hasHTTPSlotForMeta(int current); public void measureBandwidth(); public float getMeasuredBandwidth() throws InsufficientDataException; public float getAverageBandwidth(); /** * Cancels the request issued by the upload slot user. */ public void cancelRequest(UploadSlotUser user); /** * Notification that the UploadSlotUser is done with its request. */ public void requestDone(UploadSlotUser user); public int getNumActive(); public int getNumQueued(); public int getNumQueuedResumable(); public int getNumUsersForHost(String host); public void cleanup(); }