package com.limegroup.gnutella;
import org.limewire.bittorrent.TorrentManager;
import org.limewire.core.settings.UploadSettings;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.Singleton;
import com.limegroup.gnutella.uploader.UploadSlotManager;
@Singleton
public class UploadServicesImpl implements UploadServices {
private final Provider<UploadManager> uploadManager;
private final Provider<UploadSlotManager> uploadSlotManager;
private final Provider<ConnectionManager> connectionManager;
@Inject
public UploadServicesImpl(Provider<UploadManager> uploadManager,
Provider<UploadSlotManager> uploadSlotManager,
Provider<ConnectionManager> connectionManager,
Provider<TorrentManager> torrentManager) {
this.uploadManager = uploadManager;
this.uploadSlotManager = uploadSlotManager;
this.connectionManager = connectionManager;
}
/* (non-Javadoc)
* @see com.limegroup.gnutella.UploadServices#hasActiveUploads()
*/
public boolean hasActiveUploads() {
uploadSlotManager.get().measureBandwidth();
try {
return uploadSlotManager.get().getMeasuredBandwidth() > 0;
} catch (InsufficientDataException ide) {
}
return false;
}
/* (non-Javadoc)
* @see com.limegroup.gnutella.UploadServices#getRequestedUploadSpeed()
*/
public float getRequestedUploadSpeed() {
// if the user chose not to limit his uploads
// by setting the upload speed to unlimited
// set the upload speed to 3.4E38 bytes per second.
// This is de facto not limiting the uploads
if (!UploadSettings.LIMIT_MAX_UPLOAD_SPEED.getValue()) {
return Float.MAX_VALUE;
} else {
// if the uploads are limited, take messageUpstream
// for ultrapeers into account, - don't allow lower
// speeds than 1kb/s so uploads won't stall completely
// if the user accidently sets his connection speed
// lower than his message upstream
int uSpeed = UploadSettings.MAX_UPLOAD_SPEED.getValue();
// reduced upload speed if we are an ultrapeer
uSpeed -= (connectionManager.get().getMeasuredUpstreamBandwidth() * 1024f);
// we need bytes per second
return Math.max(uSpeed, 1024f);
}
}
/* (non-Javadoc)
* @see com.limegroup.gnutella.UploadServices#getNumUploads()
*/
public int getNumUploads() {
return uploadManager.get().uploadsInProgress();
}
/* (non-Javadoc)
* @see com.limegroup.gnutella.UploadServices#getNumQueuedUploads()
*/
public int getNumQueuedUploads() {
return uploadManager.get().getNumQueuedUploads();
}
}