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

📄 peermanagerimpl.java

📁 java 文件下载器。可自定义
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
// Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://kpdus.tripod.com/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi space 
// Source File Name:   PeerManagerImpl.java

package org.gudy.azureus2.pluginsimpl.local.peers;

import com.aelitis.azureus.core.networkmanager.NetworkManager;
import com.aelitis.azureus.core.peermanager.peerdb.PeerItem;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.gudy.azureus2.core3.disk.DiskManager;
import org.gudy.azureus2.core3.disk.DiskManagerPiece;
import org.gudy.azureus2.core3.disk.DiskManagerReadRequest;
import org.gudy.azureus2.core3.peer.PEPeer;
import org.gudy.azureus2.core3.peer.PEPeerManager;
import org.gudy.azureus2.core3.peer.PEPeerManagerListener;
import org.gudy.azureus2.core3.peer.PEPiece;
import org.gudy.azureus2.core3.util.AEMonitor;
import org.gudy.azureus2.core3.util.Debug;
import org.gudy.azureus2.core3.util.TorrentUtils;
import org.gudy.azureus2.plugins.download.Download;
import org.gudy.azureus2.plugins.download.DownloadException;
import org.gudy.azureus2.plugins.peers.Peer;
import org.gudy.azureus2.plugins.peers.PeerDescriptor;
import org.gudy.azureus2.plugins.peers.PeerManager;
import org.gudy.azureus2.plugins.peers.PeerManagerEvent;
import org.gudy.azureus2.plugins.peers.PeerManagerListener;
import org.gudy.azureus2.plugins.peers.PeerManagerListener2;
import org.gudy.azureus2.plugins.peers.PeerManagerStats;
import org.gudy.azureus2.plugins.peers.PeerReadRequest;
import org.gudy.azureus2.plugins.peers.PeerStats;
import org.gudy.azureus2.plugins.peers.Piece;
import org.gudy.azureus2.plugins.utils.PooledByteBuffer;
import org.gudy.azureus2.pluginsimpl.local.PluginCoreUtils;
import org.gudy.azureus2.pluginsimpl.local.disk.DiskManagerImpl;
import org.gudy.azureus2.pluginsimpl.local.download.DownloadManagerImpl;
import org.gudy.azureus2.pluginsimpl.local.utils.PooledByteBufferImpl;

// Referenced classes of package org.gudy.azureus2.pluginsimpl.local.peers:
//			PeerForeignDelegate, PeerImpl, PeerManagerStatsImpl, PeerStatsImpl

public class PeerManagerImpl
	implements PeerManager
{
	protected class pieceFacade
		implements Piece
	{

		private final int index;
		final PeerManagerImpl this$0;

		public boolean isDone()
		{
			return dm_pieces[index].isDone();
		}

		public boolean isNeeded()
		{
			return dm_pieces[index].isNeeded();
		}

		public boolean isDownloading()
		{
			return pe_pieces[index] != null;
		}

		public boolean isFullyAllocatable()
		{
			if (pe_pieces[index] != null)
				return false;
			else
				return dm_pieces[index].isInteresting();
		}

		public int getAllocatableRequestCount()
		{
			PEPiece pe_piece = pe_pieces[index];
			if (pe_piece != null)
				return pe_piece.getNbUnrequested();
			if (dm_pieces[index].isInteresting())
				return dm_pieces[index].getNbBlocks();
			else
				return 0;
		}

		protected pieceFacade(int _index)
		{
			this$0 = PeerManagerImpl.this;
			super();
			index = _index;
		}
	}


	private static final String PEPEER_DATA_KEY = org/gudy/azureus2/pluginsimpl/local/peers/PeerManagerImpl.getName();
	protected PEPeerManager manager;
	protected static AEMonitor pm_map_mon = new AEMonitor("PeerManager:Map");
	private Map foreign_map;
	private Map listener_map;
	protected AEMonitor this_mon;
	private final DiskManagerPiece dm_pieces[];
	private final PEPiece pe_pieces[];
	private pieceFacade piece_facades[];
	private boolean destroyed;

	public static PeerManagerImpl getPeerManager(PEPeerManager _manager)
	{
		PeerManagerImpl peermanagerimpl;
		pm_map_mon.enter();
		PeerManagerImpl res = (PeerManagerImpl)_manager.getData("PluginPeerManager");
		if (res == null)
		{
			res = new PeerManagerImpl(_manager);
			_manager.setData("PluginPeerManager", res);
		}
		peermanagerimpl = res;
		pm_map_mon.exit();
		return peermanagerimpl;
		Exception exception;
		exception;
		pm_map_mon.exit();
		throw exception;
	}

	protected PeerManagerImpl(PEPeerManager _manager)
	{
		foreign_map = new HashMap();
		listener_map = new HashMap();
		this_mon = new AEMonitor("PeerManager");
		manager = _manager;
		dm_pieces = _manager.getDiskManager().getPieces();
		pe_pieces = _manager.getPieces();
		manager.addListener(new PEPeerManagerListener() {

			final PeerManagerImpl this$0;

			public void peerAdded(PEPeerManager pepeermanager, PEPeer pepeer)
			{
			}

			public void peerRemoved(PEPeerManager manager, PEPeer peer)
			{
				PeerImpl dele = PeerManagerImpl.getPeerForPEPeer(peer);
				if (dele != null)
					dele.closed();
			}

			public void peerDiscovered(PEPeerManager pepeermanager, PeerItem peeritem, PEPeer pepeer)
			{
			}

			public void peerSentBadData(PEPeerManager pepeermanager, PEPeer pepeer, int i)
			{
			}

			public void destroyed()
			{
				synchronized (foreign_map)
				{
					PeerManagerImpl.this.destroyed = true;
					for (Iterator it = foreign_map.values().iterator(); it.hasNext();)
						try
						{
							((PeerForeignDelegate)it.next()).stop();
						}
						catch (Throwable e)
						{
							Debug.printStackTrace(e);
						}

				}
			}

			
			{
				this$0 = PeerManagerImpl.this;
				super();
			}
		});
	}

	public PEPeerManager getDelegate()
	{
		return manager;
	}

	public org.gudy.azureus2.plugins.disk.DiskManager getDiskManager()
	{
		return new DiskManagerImpl(manager.getDiskManager());
	}

	public PeerManagerStats getStats()
	{
		return new PeerManagerStatsImpl(manager);
	}

	public boolean isSeeding()
	{
		return manager.getDiskManager().getRemainingExcludingDND() == 0L;
	}

	public boolean isSuperSeeding()
	{
		return manager.isSuperSeedMode();
	}

	public Download getDownload()
		throws DownloadException
	{
		return DownloadManagerImpl.getDownloadStatic(manager.getDiskManager().getTorrent());
	}

	public Piece[] getPieces()
	{
		if (piece_facades == null)
		{
			pieceFacade pf[] = new pieceFacade[manager.getDiskManager().getNbPieces()];
			for (int i = 0; i < pf.length; i++)
				pf[i] = new pieceFacade(i);

			piece_facades = pf;
		}
		return piece_facades;
	}

	public PeerStats createPeerStats(Peer peer)
	{
		PEPeer delegate = mapForeignPeer(peer);
		return new PeerStatsImpl(this, peer, manager.createPeerStats(delegate));
	}

	public void requestComplete(PeerReadRequest request, PooledByteBuffer data, Peer sender)
	{
		manager.writeBlock(request.getPieceNumber(), request.getOffset(), ((PooledByteBufferImpl)data).getBuffer(), mapForeignPeer(sender), false);
		PeerForeignDelegate delegate = lookupForeignPeer(sender);
		if (delegate != null)
			delegate.dataReceived();
	}

	public void requestCancelled(PeerReadRequest request, Peer sender)
	{
		manager.requestCanceled((DiskManagerReadRequest)request);
	}

	public void addPeer(Peer peer)
	{
		manager.addPeer(mapForeignPeer(peer));
	}

	public void removePeer(Peer peer)
	{
		manager.removePeer(mapForeignPeer(peer));
	}

	protected void removePeer(Peer peer, String reason)
	{
		manager.removePeer(mapForeignPeer(peer), reason);
	}

	public void addPeer(String ip_address, int tcp_port)
	{
		addPeer(ip_address, tcp_port, 0, NetworkManager.getCryptoRequired(0));
	}

	public void addPeer(String ip_address, int tcp_port, boolean use_crypto)
	{
		addPeer(ip_address, tcp_port, 0, use_crypto);
	}

	public void addPeer(String ip_address, int tcp_port, int udp_port, boolean use_crypto)
	{
		addPeer(ip_address, tcp_port, udp_port, use_crypto, null);
	}

	public void addPeer(String ip_address, int tcp_port, int udp_port, boolean use_crypto, Map user_data)
	{
		checkIfPrivate();
		if (pluginPeerSourceEnabled())
			manager.addPeer(ip_address, tcp_port, udp_port, use_crypto, user_data);
	}

	protected boolean pluginPeerSourceEnabled()
	{
		if (manager.isPeerSourceEnabled("Plugin"))
		{
			return true;
		} else
		{
			Debug.out((new StringBuilder()).append("Plugin peer source disabled for ").append(manager.getDisplayName()).toString());
			return false;
		}
	}

	protected void checkIfPrivate()
	{
		Download dl;
		try
		{
			dl = getDownload();
		}
		catch (Throwable e)
		{
			return;
		}
		org.gudy.azureus2.plugins.torrent.Torrent t = dl.getTorrent();
		if (t != null && TorrentUtils.isReallyPrivate(PluginCoreUtils.unwrap(t)))
			throw new RuntimeException("Torrent is private, peer addition not permitted");

⌨️ 快捷键说明

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