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

📄 peersgraphicview.java

📁 java 文件下载器。可自定义
💻 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 + -