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

📄 resourcedownloaderalternateimpl.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:   ResourceDownloaderAlternateImpl.java

package org.gudy.azureus2.pluginsimpl.local.utils.resourcedownloader;

import java.io.InputStream;
import java.util.*;
import org.gudy.azureus2.core3.util.AEMonitor;
import org.gudy.azureus2.core3.util.AESemaphore;
import org.gudy.azureus2.plugins.utils.resourcedownloader.*;

// Referenced classes of package org.gudy.azureus2.pluginsimpl.local.utils.resourcedownloader:
//			ResourceDownloaderBaseImpl

public class ResourceDownloaderAlternateImpl extends ResourceDownloaderBaseImpl
	implements ResourceDownloaderListener
{

	protected ResourceDownloader delegates[];
	protected int max_to_try;
	protected boolean random;
	protected boolean cancelled;
	protected ResourceDownloader current_downloader;
	protected int current_index;
	protected Object result;
	protected AESemaphore done_sem;
	protected long size;

	public ResourceDownloaderAlternateImpl(ResourceDownloaderBaseImpl _parent, ResourceDownloader _delegates[], int _max_to_try, boolean _random)
	{
		super(_parent);
		done_sem = new AESemaphore("RDAlternate");
		size = -2L;
		delegates = _delegates;
		max_to_try = _max_to_try;
		random = _random;
		for (int i = 0; i < delegates.length; i++)
			((ResourceDownloaderBaseImpl)delegates[i]).setParent(this);

		if (max_to_try < 0)
			max_to_try = delegates.length;
		else
			max_to_try = Math.min(max_to_try, delegates.length);
		if (random)
		{
			List l = new ArrayList(Arrays.asList(delegates));
			delegates = new ResourceDownloader[delegates.length];
			for (int i = 0; i < delegates.length; i++)
				delegates[i] = (ResourceDownloader)l.remove((int)(Math.random() * (double)l.size()));

		}
	}

	public String getName()
	{
		String res = "[";
		for (int i = 0; i < delegates.length; i++)
			res = (new StringBuilder()).append(res).append(i != 0 ? "," : "").append(delegates[i].getName()).toString();

		return (new StringBuilder()).append(res).append("]").toString();
	}

	public long getSize()
		throws ResourceDownloaderException
	{
		if (delegates.length == 0)
		{
			ResourceDownloaderException error = new ResourceDownloaderException("Alternate download fails - 0 alteratives");
			informFailed(error);
			throw error;
		}
		if (size != -2L)
			return size;
		int i = 0;
		do
		{
			if (i >= max_to_try)
				break;
			try
			{
				ResourceDownloaderBaseImpl c = ((ResourceDownloaderBaseImpl)delegates[i]).getClone(this);
				addReportListener(c);
				size = c.getSize();
				setProperties(c);
				break;
			}
			catch (ResourceDownloaderException e)
			{
				if (i == delegates.length - 1)
					throw e;
				i++;
			}
		} while (true);
		if (size == -2L)
			size = -1L;
		setSize(size);
		break MISSING_BLOCK_LABEL_164;
		Exception exception;
		exception;
		if (size == -2L)
			size = -1L;
		setSize(size);
		throw exception;
		return size;
	}

	protected void setSize(long l)
	{
		size = l;
		if (size >= 0L)
		{
			for (int i = 0; i < delegates.length; i++)
				((ResourceDownloaderBaseImpl)delegates[i]).setSize(size);

		}
	}

	public void setProperty(String name, Object value)
		throws ResourceDownloaderException
	{
		setPropertySupport(name, value);
		for (int i = 0; i < delegates.length; i++)
			((ResourceDownloaderBaseImpl)delegates[i]).setProperty(name, value);

	}

	public ResourceDownloaderBaseImpl getClone(ResourceDownloaderBaseImpl parent)
	{
		ResourceDownloader clones[] = new ResourceDownloader[delegates.length];
		for (int i = 0; i < delegates.length; i++)
			clones[i] = ((ResourceDownloaderBaseImpl)delegates[i]).getClone(this);

		ResourceDownloaderAlternateImpl c = new ResourceDownloaderAlternateImpl(parent, clones, max_to_try, random);
		c.setSize(size);
		c.setProperties(this);
		return c;
	}

	public InputStream download()
		throws ResourceDownloaderException
	{
		if (delegates.length == 0)
		{
			ResourceDownloaderException error = new ResourceDownloaderException("Alternate download fails - 0 alteratives");
			informFailed(error);
			throw error;
		}
		asyncDownload();
		done_sem.reserve();
		if (result instanceof InputStream)
			return (InputStream)result;
		else
			throw (ResourceDownloaderException)result;
	}

	public void asyncDownload()
	{
		this_mon.enter();
		if (current_index == max_to_try || cancelled)
		{
			done_sem.release();
			informFailed((ResourceDownloaderException)result);
		} else
		{
			current_downloader = ((ResourceDownloaderBaseImpl)delegates[current_index]).getClone(this);
			informActivity((new StringBuilder()).append(getLogIndent()).append("Downloading: ").append(getName()).toString());
			current_index++;
			current_downloader.addListener(this);
			current_downloader.asyncDownload();
		}
		this_mon.exit();
		break MISSING_BLOCK_LABEL_148;
		Exception exception;
		exception;
		this_mon.exit();
		throw exception;
	}

	public void cancel()
	{
		setCancelled();
		this_mon.enter();
		result = new ResourceDownloaderCancelledException();
		cancelled = true;
		informFailed((ResourceDownloaderException)result);
		done_sem.release();
		if (current_downloader != null)
			current_downloader.cancel();
		this_mon.exit();
		break MISSING_BLOCK_LABEL_81;
		Exception exception;
		exception;
		this_mon.exit();
		throw exception;
	}

	public boolean completed(ResourceDownloader downloader, InputStream data)
	{
		if (informComplete(data))
		{
			result = data;
			done_sem.release();
			return true;
		} else
		{
			return false;
		}
	}

	public void failed(ResourceDownloader downloader, ResourceDownloaderException e)
	{
		result = e;
		asyncDownload();
	}
}

⌨️ 快捷键说明

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