⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 downloadmanagerimpl.java

📁 这是一个基于java编写的torrent的P2P源码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
	
	public static Download
	getDownloadStatic(
		DiskManager	dm )
	
		throws DownloadException
	{
		if ( singleton != null ){
			
			return( singleton.getDownload( dm ));
		}
		
		throw( new DownloadException( "DownloadManager not initialised"));
	}
	
	public Download
	getDownload(
		DiskManager	dm )
	
		throws DownloadException
	{
		List	dls = global_manager.getDownloadManagers();

		for (int i=0;i<dls.size();i++){
			
			DownloadManager	man = (DownloadManager)dls.get(i);
			
			if ( man.getDiskManager() == dm ){
				
				return( getDownload( man.getTorrent()));
			}
		}
		
		return( null );
	}

	protected Download
	getDownload(
		TOTorrent	torrent )
	
		throws DownloadException
	{
		for (int i=0;i<downloads.size();i++){
			
			Download	dl = (Download)downloads.get(i);
			
			TorrentImpl	t = (TorrentImpl)dl.getTorrent();
			
				// can be null if broken torrent
			
			if ( t == null ){
				
				continue;
			}
			
			if ( t.getTorrent().hasSameHashAs( torrent )){
				
				return( dl );
			}
		}
		
		throw( new DownloadException("DownloadManager::getDownload: download not found"));
	}
	
	public static Download
	getDownloadStatic(
		TOTorrent	torrent )
	
		throws DownloadException
	{
		if ( singleton != null ){
			
			return( singleton.getDownload( torrent ));
		}
		
		throw( new DownloadException( "DownloadManager not initialised"));
	}
	
	public Download
	getDownload(
		Torrent		_torrent )
	{
		TorrentImpl	torrent = (TorrentImpl)_torrent;
		
		try{
			return( getDownload( torrent.getTorrent()));
			
		}catch( DownloadException e ){
		}
		
		return( null );
	}
	
	public Download
	getDownload(
		byte[]	hash )
	{
		List	dls = global_manager.getDownloadManagers();

		for (int i=0;i<dls.size();i++){
			
			DownloadManager	man = (DownloadManager)dls.get(i);
			
				// torrent can be null if download manager torrent file read fails
			
			TOTorrent	torrent = man.getTorrent();
			
			if ( torrent != null ){
				
				try{
					if ( Arrays.equals( torrent.getHash(), hash )){
				
						return( getDownload( torrent ));
					}
				}catch( DownloadException e ){
					
						// not found
					
				}catch( TOTorrentException e ){
					
					Debug.printStackTrace( e );
				}
			}
		}
		
		return( null );
	}
	
	public Download[]
	getDownloads()
	{
		List	res_l = new ArrayList();
	
		// we have to use the global manager's ordering as it
		// hold this

		List dms = global_manager.getDownloadManagers();

		try{
			listeners_mon.enter();

			for (int i=0;i<dms.size();i++){
			
				Object	dl = download_map.get( dms.get(i));
				
				if ( dl != null ){
					
					res_l.add( dl );
				}
			}
			
			if ( res_l.size() < downloads.size()){
				
					// now add in any external downloads 
				
				for (int i=0;i<downloads.size();i++){
					
					Download	download = (Download)downloads.get(i);
			
					if ( !res_l.contains( download )){
						
						res_l.add( download );
					}
				}
			}
		}finally{
			
			listeners_mon.exit();
		}
		
		Download[]	res = new Download[res_l.size()];
			
		res_l.toArray( res );
			
		return( res );
	}
	
	public Download[]
	getDownloads(boolean bSorted)
	{
		if (bSorted){
	  
			return getDownloads();
		}
	  
		try{
			listeners_mon.enter();
		
			Download[]	res = new Download[downloads.size()];
			
			downloads.toArray( res );
			
			return( res );
			
		}finally{
			
			listeners_mon.exit();
		}
	}

	public void
	pauseDownloads()
	{
		global_manager.pauseDownloads();
	}
	
	public boolean
	canPauseDownloads()
	{
		return global_manager.canPauseDownloads();
	}
		
	public void
	resumeDownloads()
	{
		global_manager.resumeDownloads();
	}
	
	public boolean
	canResumeDownloads()
	{
		return global_manager.canResumeDownloads();
	}
		
	public void
	startAllDownloads()
	{
		global_manager.startAllDownloads();
	}
		
	public void
	stopAllDownloads()
	{
		global_manager.stopAllDownloads();
	}
	
	public DownloadManagerStats
	getStats()
	{
		return( stats );
	}
	
	public boolean
	isSeedingOnly()
	{
		return( global_manager.isSeedingOnly());
	}
	
	public void
	addListener(
		DownloadManagerListener	l )
	{
		List	downloads_copy;
		
		try{
			listeners_mon.enter();
			
			List	new_listeners = new ArrayList( listeners );
			
			new_listeners.add( l );
		
			listeners	= new_listeners;
			
			downloads_copy = new ArrayList( downloads );
	
		}finally{
			
			listeners_mon.exit();
		}	
		
		for (int i=0;i<downloads_copy.size();i++){
			
			try{
					
				l.downloadAdded((Download)downloads_copy.get(i));
				
			}catch( Throwable e ){
				
				Debug.printStackTrace( e );
			}
		}
	}
	
	public void
	removeListener(
		DownloadManagerListener	l )
	{
		try{
			listeners_mon.enter();
			
			List	new_listeners	= new ArrayList( listeners );
			
			new_listeners.remove(l);
			
			listeners	= new_listeners;
			
		}finally{
			listeners_mon.exit();
		}	
	}
	
	public void
	initialised(
		DownloadManager		manager )
	{
		DownloadImpl	dl;
		
		try{
			listeners_mon.enter();
			
			dl = new DownloadImpl( manager );
			
			pending_dls.put( manager, dl );
			
		}finally{
			
			listeners_mon.exit();
		}
		
		Iterator	it = dwba_listeners.iterator();
		
		while( it.hasNext()){
			
			try{
				((DownloadWillBeAddedListener)it.next()).initialised(dl);
				
			}catch( Throwable e ){
				
				Debug.printStackTrace(e);
			}
		}
	}
	
	public void
	addDownloadWillBeAddedListener(
		DownloadWillBeAddedListener		listener )
	{
		try{
			listeners_mon.enter();
			
			dwba_listeners.add( listener );
			
			if ( dwba_listeners.size() == 1 ){
				
				global_manager.addDownloadManagerInitialisationAdapter( this );
			}
			
		}finally{
			listeners_mon.exit();
		}	
	}
	
	public void
	removeDownloadWillBeAddedListener(
		DownloadWillBeAddedListener		listener )
	{
		try{
			listeners_mon.enter();
			
			dwba_listeners.remove( listener );
			
			if ( dwba_listeners.size() == 0 ){
				
				global_manager.removeDownloadManagerInitialisationAdapter( this );
			}
			
		}finally{
			listeners_mon.exit();
		}	
	}
	
	public void
	addExternalDownload(
		Download	download )
	{
		List			listeners_ref 	= null;
		
		try{
			listeners_mon.enter();
			
			if ( downloads.contains( download )){
	
				return;
			}
	
			downloads.add( download );
								
			listeners_ref = listeners;
			
		}finally{
			
			listeners_mon.exit();
		}
					
		for (int i=0;i<listeners_ref.size();i++){
				
			try{
				((DownloadManagerListener)listeners_ref.get(i)).downloadAdded( download );
				
			}catch( Throwable e ){
					
				Debug.printStackTrace( e );
			}
		}
	}
	
	public void
	removeExternalDownload(
		Download	download )
	{
		List			listeners_ref 	= null;
		
		try{
			listeners_mon.enter();
			
			if ( !downloads.contains( download )){
	
				return;
			}
	
			downloads.remove( download );
								
			listeners_ref = listeners;
			
		}finally{
			
			listeners_mon.exit();
		}
					
		for (int i=0;i<listeners_ref.size();i++){
				
			try{
				((DownloadManagerListener)listeners_ref.get(i)).downloadRemoved( download );
				
			}catch( Throwable e ){
					
				Debug.printStackTrace( e );
			}
		}
	}
	
	public boolean
	isExteralDownload(
		Download	download )
	{
		return( !( download instanceof DownloadImpl ));
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -