📄 peersgraphicview.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: PeersGraphicView.java
package org.gudy.azureus2.ui.swt.views;
import java.util.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.widgets.*;
import org.gudy.azureus2.core3.download.*;
import org.gudy.azureus2.core3.peer.PEPeer;
import org.gudy.azureus2.core3.peer.PEPeerManager;
import org.gudy.azureus2.core3.peer.impl.PEPeerTransport;
import org.gudy.azureus2.core3.util.AEMonitor;
import org.gudy.azureus2.ui.swt.components.graphics.PieUtils;
import org.gudy.azureus2.ui.swt.mainwindow.Colors;
// Referenced classes of package org.gudy.azureus2.ui.swt.views:
// AbstractIView
public class PeersGraphicView extends AbstractIView
implements DownloadManagerPeerListener
{
class PeerComparator
implements Comparator
{
final PeersGraphicView this$0;
public int compare(Object arg0, Object arg1)
{
PEPeer peer0 = (PEPeer)arg0;
PEPeer peer1 = (PEPeer)arg1;
int percent0 = peer0.getPercentDoneInThousandNotation();
int percent1 = peer1.getPercentDoneInThousandNotation();
return percent0 - percent1;
}
PeerComparator()
{
this$0 = PeersGraphicView.this;
super();
}
}
private DownloadManager manager;
private static final int NB_ANGLES = 1000;
private double angles[];
private double deltaPerimeters[];
private double perimeter;
private double rs[];
private double deltaXXs[];
private double deltaXYs[];
private double deltaYXs[];
private double deltaYYs[];
private Point oldSize;
private List peers;
private AEMonitor peers_mon;
private PeerComparator peerComparator;
private Display display;
private Composite panel;
private static final int PEER_SIZE = 15;
private static final int PACKET_SIZE = 10;
private static final int OWN_SIZE = 75;
private boolean antiAliasingAvailable;
public PeersGraphicView()
{
manager = null;
peers_mon = new AEMonitor("PeersGraphicView:peers");
antiAliasingAvailable = true;
angles = new double[1000];
deltaPerimeters = new double[1000];
rs = new double[1000];
deltaXXs = new double[1000];
deltaXYs = new double[1000];
deltaYXs = new double[1000];
deltaYYs = new double[1000];
for (int i = 0; i < 1000; i++)
{
angles[i] = ((double)(2 * i) * 3.1415926535897931D) / 1000D - 3.1415926535897931D;
deltaXXs[i] = Math.cos(angles[i]);
deltaXYs[i] = Math.sin(angles[i]);
deltaYXs[i] = Math.cos(angles[i] + 1.5707963267948966D);
deltaYYs[i] = Math.sin(angles[i] + 1.5707963267948966D);
}
peers = new ArrayList();
peerComparator = new PeerComparator();
}
public void dataSourceChanged(Object newDataSource)
{
if (manager != null)
manager.removePeerListener(this);
if (newDataSource == null)
manager = null;
else
if (newDataSource instanceof Object[])
manager = (DownloadManager)((Object[])(Object[])newDataSource)[0];
else
manager = (DownloadManager)newDataSource;
if (manager != null)
manager.addPeerListener(this);
}
public void delete()
{
if (manager != null)
manager.removePeerListener(this);
super.delete();
}
public Composite getComposite()
{
return panel;
}
public String getData()
{
return "PeersGraphicView.title";
}
public void initialize(Composite composite)
{
display = composite.getDisplay();
panel = new Canvas(composite, 0);
}
public void refresh()
{
doRefresh();
}
private void doRefresh()
{
PEPeer sortedPeers[];
peers_mon.enter();
List connectedPeers = new ArrayList();
Iterator iter = peers.iterator();
do
{
if (!iter.hasNext())
break;
PEPeerTransport peer = (PEPeerTransport)iter.next();
if (peer.getConnectionState() == 4)
connectedPeers.add(peer);
} while (true);
sortedPeers = (PEPeer[])(PEPeer[])connectedPeers.toArray(new PEPeer[connectedPeers.size()]);
peers_mon.exit();
break MISSING_BLOCK_LABEL_112;
Exception exception;
exception;
peers_mon.exit();
throw exception;
if (sortedPeers == null)
{
return;
} else
{
Arrays.sort(sortedPeers, peerComparator);
render(sortedPeers);
return;
}
}
private void render(PEPeer sortedPeers[])
{
if (panel == null || panel.isDisposed() || manager == null)
return;
Point panelSize = panel.getSize();
int x0 = panelSize.x / 2;
int y0 = panelSize.y / 2;
int a = x0 - 20;
int b = y0 - 20;
if (a < 10 || b < 10)
return;
if (oldSize == null || !oldSize.equals(panelSize))
{
oldSize = panelSize;
perimeter = 0.0D;
for (int i = 0; i < 1000; i++)
{
rs[i] = Math.sqrt(1.0D / ((deltaYXs[i] * deltaYXs[i]) / (double)(a * a) + (deltaYYs[i] * deltaYYs[i]) / (double)(b * b)));
perimeter += rs[i];
}
}
Image buffer = new Image(display, panelSize.x, panelSize.y);
GC gcBuffer = new GC(buffer);
gcBuffer.setBackground(Colors.white);
gcBuffer.setForeground(Colors.blue);
gcBuffer.fillRectangle(0, 0, panelSize.x, panelSize.y);
if (SWT.getVersion() < 3138 || !antiAliasingAvailable);
gcBuffer.setBackground(Colors.blues[2]);
int nbPeers = sortedPeers.length;
int iAngle = 0;
double currentPerimeter = 0.0D;
for (int i = 0; i < nbPeers; i++)
{
PEPeer peer = sortedPeers[i];
double angle;
double r;
do
{
angle = angles[iAngle];
r = rs[iAngle];
currentPerimeter += r;
if (iAngle + 1 < 1000)
iAngle++;
} while (currentPerimeter < ((double)i * perimeter) / (double)nbPeers);
angle = ((double)(4 * i - nbPeers) * 3.1415926535897931D) / (double)(2 * nbPeers) - 1.5707963267948966D;
int rectangle[] = new int[8];
if (!peer.isChokedByMe() || !peer.isChokingMe())
{
gcBuffer.setForeground(Colors.blues[2]);
int x1 = x0 + (int)(r * deltaYXs[iAngle]);
int y1 = y0 + (int)(r * deltaYYs[iAngle]);
gcBuffer.drawLine(x0, y0, x1, y1);
}
int percentSent = peer.getPercentDoneOfCurrentIncomingRequest();
if (percentSent >= 0)
{
gcBuffer.setBackground(Colors.blues[7]);
double r1 = r - (r * (double)percentSent) / 100D;
rectangle[0] = (int)((double)x0 + r1 * deltaYXs[iAngle] + 0.5D);
rectangle[1] = (int)((double)y0 + r1 * deltaYYs[iAngle] + 0.5D);
rectangle[2] = (int)((double)x0 + deltaXXs[iAngle] * 4D + r1 * deltaYXs[iAngle] + 0.5D);
rectangle[3] = (int)((double)y0 + deltaXYs[iAngle] * 4D + r1 * deltaYYs[iAngle] + 0.5D);
rectangle[4] = (int)((double)x0 + deltaXXs[iAngle] * 4D + (r1 - 10D) * deltaYXs[iAngle] + 0.5D);
rectangle[5] = (int)((double)y0 + deltaXYs[iAngle] * 4D + (r1 - 10D) * deltaYYs[iAngle] + 0.5D);
rectangle[6] = (int)((double)x0 + (r1 - 10D) * deltaYXs[iAngle] + 0.5D);
rectangle[7] = (int)((double)y0 + (r1 - 10D) * deltaYYs[iAngle] + 0.5D);
gcBuffer.fillPolygon(rectangle);
}
percentSent = peer.getPercentDoneOfCurrentOutgoingRequest();
if (percentSent >= 0)
{
gcBuffer.setBackground(Colors.blues[2]);
double r1 = (r * (double)percentSent) / 100D;
rectangle[0] = (int)((double)x0 + r1 * deltaYXs[iAngle] + 0.5D);
rectangle[1] = (int)((double)y0 + r1 * deltaYYs[iAngle] + 0.5D);
rectangle[2] = (int)(((double)x0 - deltaXXs[iAngle] * 4D) + r1 * deltaYXs[iAngle] + 0.5D);
rectangle[3] = (int)(((double)y0 - deltaXYs[iAngle] * 4D) + r1 * deltaYYs[iAngle] + 0.5D);
rectangle[4] = (int)(((double)x0 - deltaXXs[iAngle] * 4D) + (r1 - 10D) * deltaYXs[iAngle] + 0.5D);
rectangle[5] = (int)(((double)y0 - deltaXYs[iAngle] * 4D) + (r1 - 10D) * deltaYYs[iAngle] + 0.5D);
rectangle[6] = (int)((double)x0 + (r1 - 10D) * deltaYXs[iAngle] + 0.5D);
rectangle[7] = (int)((double)y0 + (r1 - 10D) * deltaYYs[iAngle] + 0.5D);
gcBuffer.fillPolygon(rectangle);
}
int x1 = x0 + (int)(r * deltaYXs[iAngle]);
int y1 = y0 + (int)(r * deltaYYs[iAngle]);
gcBuffer.setBackground(Colors.blues[7]);
if (peer.isSnubbed())
gcBuffer.setBackground(Colors.grey);
PieUtils.drawPie(gcBuffer, x1 - 7, y1 - 7, 15, 15, peer.getPercentDoneInThousandNotation() / 10);
}
gcBuffer.setBackground(Colors.blues[7]);
PieUtils.drawPie(gcBuffer, x0 - 37, y0 - 37, 75, 75, manager.getStats().getCompleted() / 10);
gcBuffer.dispose();
GC gcPanel = new GC(panel);
gcPanel.drawImage(buffer, 0, 0);
gcPanel.dispose();
buffer.dispose();
}
public void peerManagerWillBeAdded(PEPeerManager pepeermanager)
{
}
public void peerManagerAdded(PEPeerManager pepeermanager)
{
}
public void peerManagerRemoved(PEPeerManager pepeermanager)
{
}
public void peerAdded(PEPeer peer)
{
peers_mon.enter();
peers.add(peer);
peers_mon.exit();
break MISSING_BLOCK_LABEL_38;
Exception exception;
exception;
peers_mon.exit();
throw exception;
}
public void peerRemoved(PEPeer peer)
{
peers_mon.enter();
peers.remove(peer);
peers_mon.exit();
break MISSING_BLOCK_LABEL_38;
Exception exception;
exception;
peers_mon.exit();
throw exception;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -