package org.limewire.core.impl.support;
import org.limewire.core.api.library.RemoteLibraryManager;
import org.limewire.core.api.support.SessionInfo;
import org.limewire.net.SocketsManager;
import org.limewire.nio.ByteBufferCache;
import org.limewire.nio.NIODispatcher;
import com.google.inject.Inject;
import com.limegroup.gnutella.Acceptor;
import com.limegroup.gnutella.ConnectionManager;
import com.limegroup.gnutella.ConnectionServices;
import com.limegroup.gnutella.DownloadManager;
import com.limegroup.gnutella.DownloadServices;
import com.limegroup.gnutella.LifecycleManager;
import com.limegroup.gnutella.Statistics;
import com.limegroup.gnutella.UDPService;
import com.limegroup.gnutella.UploadServices;
import com.limegroup.gnutella.auth.ContentManager;
import com.limegroup.gnutella.connection.ConnectionCheckerManager;
import com.limegroup.gnutella.downloader.DiskController;
import com.limegroup.gnutella.library.CreationTimeCache;
import com.limegroup.gnutella.library.FileView;
import com.limegroup.gnutella.library.GnutellaFiles;
import com.limegroup.gnutella.library.Library;
import com.limegroup.gnutella.simpp.SimppManager;
import com.limegroup.gnutella.uploader.UploadSlotManager;
/** An implementation of SessionInfo that gets it's statistics from various LimeWire components. */
class LimeSessionInfo implements SessionInfo {
private final NIODispatcher dispatcher;
private final DownloadManager downloadManager;
private final Statistics statistics;
private final ConnectionManager connectionManager;
private final ContentManager contentManager;
private final CreationTimeCache creationTimeCache;
private final DiskController diskController;
private final SocketsManager socketsManager;
private final ByteBufferCache byteBufferCache;
private final UDPService udpService;
private final Acceptor acceptor;
private final DownloadServices downloadServices;
private final UploadServices uploadServices;
private final ConnectionCheckerManager connectionCheckerManager;
private final NIODispatcher nioDispatcher;
private final Library library;
private final FileView gnutellaFileView;
private final SimppManager simppManager;
private final UploadSlotManager uploadSlotManager;
private final ConnectionServices connectionServices;
private final LifecycleManager lifecycleManager;
private final RemoteLibraryManager remoteLibraryManager;
@Inject
public LimeSessionInfo(NIODispatcher dispatcher, DownloadManager downloadManager,
Statistics statistics, ConnectionManager connectionManager,
ContentManager contentManager, CreationTimeCache creationTimeCache,
DiskController diskController, SocketsManager socketsManager,
ByteBufferCache byteBufferCache, UDPService udpService, Acceptor acceptor,
DownloadServices downloadServices, UploadServices uploadServices,
ConnectionCheckerManager connectionCheckerManager, NIODispatcher nioDispatcher,
Library library, SimppManager simppManager,
UploadSlotManager uploadSlotManager, ConnectionServices connectionServices,
LifecycleManager lifecycleManager, RemoteLibraryManager remoteLibraryManager,
@GnutellaFiles FileView gnutellaFileView) {
this.dispatcher = dispatcher;
this.downloadManager = downloadManager;
this.statistics = statistics;
this.connectionManager = connectionManager;
this.contentManager = contentManager;
this.creationTimeCache = creationTimeCache;
this.diskController = diskController;
this.socketsManager = socketsManager;
this.byteBufferCache = byteBufferCache;
this.udpService = udpService;
this.acceptor = acceptor;
this.downloadServices = downloadServices;
this.uploadServices = uploadServices;
this.connectionCheckerManager = connectionCheckerManager;
this.nioDispatcher = nioDispatcher;
this.library = library;
this.simppManager = simppManager;
this.uploadSlotManager = uploadSlotManager;
this.connectionServices = connectionServices;
this.lifecycleManager = lifecycleManager;
this.remoteLibraryManager = remoteLibraryManager;
this.gnutellaFileView = gnutellaFileView;
}
/* (non-Javadoc)
* @see com.limegroup.gnutella.SessionInfo#getNumberOfPendingTimeouts()
*/
public int getNumberOfPendingTimeouts() {
return dispatcher.getNumPendingTimeouts();
}
/* (non-Javadoc)
* @see com.limegroup.gnutella.SessionInfo#getNumWaitingDownloads()
*/
public int getNumWaitingDownloads() {
return downloadManager.getNumWaitingDownloads();
}
/* (non-Javadoc)
* @see com.limegroup.gnutella.SessionInfo#getNumIndividualDownloaders()
*/
public int getNumIndividualDownloaders() {
return downloadManager.getNumIndividualDownloaders();
}
/* (non-Javadoc)
* @see com.limegroup.gnutella.SessionInfo#getCurrentUptime()
*/
public long getCurrentUptime() {
return statistics.getUptime();
}
/* (non-Javadoc)
* @see com.limegroup.gnutella.SessionInfo#getNumUltrapeerToLeafConnections()
*/
public int getNumUltrapeerToLeafConnections() {
return connectionManager.getNumInitializedClientConnections();
}
/* (non-Javadoc)
* @see com.limegroup.gnutella.SessionInfo#getNumLeafToUltrapeerConnections()
*/
public int getNumLeafToUltrapeerConnections() {
return connectionManager.getNumClientSupernodeConnections();
}
/* (non-Javadoc)
* @see com.limegroup.gnutella.SessionInfo#getNumUltrapeerToUltrapeerConnections()
*/
public int getNumUltrapeerToUltrapeerConnections() {
return connectionManager.getNumUltrapeerConnections();
}
/* (non-Javadoc)
* @see com.limegroup.gnutella.SessionInfo#getNumOldConnections()
*/
public int getNumOldConnections() {
return connectionManager.getNumOldConnections();
}
/* (non-Javadoc)
* @see com.limegroup.gnutella.SessionInfo#getContentResponsesSize()
*/
public long getContentResponsesSize() {
return contentManager.getCacheSize();
}
/* (non-Javadoc)
* @see com.limegroup.gnutella.SessionInfo#getCreationCacheSize()
*/
public long getCreationCacheSize() {
return creationTimeCache.getSize();
}
/* (non-Javadoc)
* @see com.limegroup.gnutella.SessionInfo#getVerifyingFileByteCacheSize()
*/
public long getDiskControllerByteCacheSize() {
return diskController.getSizeOfByteCache();
}
/* (non-Javadoc)
* @see com.limegroup.gnutella.SessionInfo#getVerifyingFileVerifyingCacheSize()
*/
public long getDiskControllerVerifyingCacheSize() {
return diskController.getSizeOfVerifyingCache();
}
/* (non-Javadoc)
* @see com.limegroup.gnutella.SessionInfo#getVerifyingFileQueueSize()
*/
public int getDiskControllerQueueSize() {
return diskController.getNumPendingItems();
}
/* (non-Javadoc)
* @see com.limegroup.gnutella.SessionInfo#getByteBufferCacheSize()
*/
public long getByteBufferCacheSize() {
return byteBufferCache.getHeapCacheSize();
}
/* (non-Javadoc)
* @see com.limegroup.gnutella.SessionInfo#getNumberOfWaitingSockets()
*/
public int getNumberOfWaitingSockets() {
return socketsManager.getNumWaitingSockets();
}
public boolean isGUESSCapable() {
return udpService.isGUESSCapable();
}
public boolean canReceiveSolicited() {
return udpService.canReceiveSolicited();
}
public boolean acceptedIncomingConnection() {
return acceptor.acceptedIncoming();
}
public int getPort() {
return acceptor.getPort(true);
}
@Override
public boolean canDoFWT() {
return udpService.canDoFWT();
}
@Override
public int getNumActiveDownloads() {
return downloadServices.getNumActiveDownloads();
}
@Override
public int getNumActiveUploads() {
return uploadServices.getNumUploads();
}
@Override
public int getNumConnectionCheckerWorkarounds() {
return connectionCheckerManager.getNumWorkarounds();
}
@Override
public int getNumQueuedUploads() {
return uploadServices.getNumQueuedUploads();
}
@Override
public long[] getSelectStats() {
return nioDispatcher.getSelectStats();
}
@Override
public int getSharedFileListSize() {
return gnutellaFileView.size();
}
@Override
public int getManagedFileListSize() {
return library.size();
}
@Override
public int getAllFriendsFileListSize() {
return remoteLibraryManager.getAllFriendsFileList().size();
}
@Override
public int getSimppVersion() {
return simppManager.getVersion();
}
@Override
public String getUploadSlotManagerInfo() {
return uploadSlotManager.toString();
}
@Override
public boolean isConnected() {
return connectionServices.isConnected();
}
@Override
public boolean isLifecycleLoaded() {
return lifecycleManager.isLoaded();
}
@Override
public boolean isShieldedLeaf() {
return connectionServices.isShieldedLeaf();
}
@Override
public boolean isSupernode() {
return connectionServices.isSupernode();
}
@Override
public boolean isUdpPortStable() {
return udpService.portStable();
}
@Override
public int lastReportedUdpPort() {
return udpService.lastReportedPort();
}
@Override
public int receivedIpPong() {
return udpService.receivedIpPong();
}
}