📄 resourcedownloaderalternateimpl.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 + -