package org.limewire.libtorrent;
import java.util.Collections;
import java.util.Set;
import org.limewire.bittorrent.TorrentScrapeData;
import org.limewire.bittorrent.TorrentTrackerScraper.ScrapeCallback;
import org.limewire.collection.IdentityHashSet;
import com.sun.jna.Callback;
public class TrackerScrapeRequestCallback implements Callback {
private final static int STATUS_SUCCESS = 0;
private final static int STATUS_TIMEOUT = 1;
private final static int STATUS_ERROR = 2;
private final static Set<TrackerScrapeRequestCallback> activeCallbacks =
Collections.synchronizedSet(new IdentityHashSet<TrackerScrapeRequestCallback>());
private final ScrapeCallback scrapeCallback;
public TrackerScrapeRequestCallback(ScrapeCallback scrapeCallback) {
this.scrapeCallback = scrapeCallback;
activeCallbacks.add(this);
}
public void callback(int status, int complete, int incomplete, int downloads) {
activeCallbacks.remove(this);
switch (status) {
case STATUS_SUCCESS:
scrapeCallback.success(new TorrentScrapeData(complete, incomplete, downloads));
break;
case STATUS_TIMEOUT:
scrapeCallback.failure("timeout");
break;
case STATUS_ERROR:
scrapeCallback.failure("error");
break;
default:
throw new IllegalArgumentException("unknown status code: " + status);
}
}
}