package com.limegroup.gnutella;
import org.limewire.bittorrent.TorrentManager;
import org.limewire.core.settings.ConnectionSettings;
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
int uSpeed = UploadSettings.UPLOAD_SPEED.getValue();
if (uSpeed == 100) {
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
// connection speed is in kbits per second and upload speed is in percent
float speed = ConnectionSettings.CONNECTION_SPEED.getValue() / 8f * uSpeed / 100f;
// reduced upload speed if we are an ultrapeer
speed -= connectionManager.get().getMeasuredUpstreamBandwidth();
// we need bytes per second
return Math.max(speed, 1f) * 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();
}
}