📄 peermanagerimpl.java
字号:
// 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 + -