X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fnet%2Fpterodactylus%2Fjsite%2Fcore%2FRequestManager.java;h=ac9d588b5526a44802187bfd52668073b0a7d4a9;hb=09fa8f788bc17540c5ee8910f927616da59ef44e;hp=b312d43f2e1406b0057887c672ffbc336ce0fdb7;hpb=fa2475af2c06ae03a4338a3fc1e327dc1970faf4;p=jSite2.git diff --git a/src/net/pterodactylus/jsite/core/RequestManager.java b/src/net/pterodactylus/jsite/core/RequestManager.java index b312d43..ac9d588 100644 --- a/src/net/pterodactylus/jsite/core/RequestManager.java +++ b/src/net/pterodactylus/jsite/core/RequestManager.java @@ -25,17 +25,8 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Set; -import java.util.logging.Level; import java.util.logging.Logger; -import net.pterodactylus.fcp.highlevel.HighLevelCallback; -import net.pterodactylus.fcp.highlevel.HighLevelCallbackListener; -import net.pterodactylus.fcp.highlevel.HighLevelClient; -import net.pterodactylus.fcp.highlevel.HighLevelProgress; -import net.pterodactylus.fcp.highlevel.HighLevelProgressListener; -import net.pterodactylus.fcp.highlevel.RequestListResult; -import net.pterodactylus.fcp.highlevel.RequestResult; import net.pterodactylus.util.logging.Logging; /** @@ -43,11 +34,10 @@ import net.pterodactylus.util.logging.Logging; * The request manager is added to the {@link NodeManager} as a * {@link NodeListener} so that it can fire request-removed events in case a * node is disconnected. - * + * * @author David ‘Bombe’ Roden <bombe@freenetproject.org> - * @version $Id$ */ -public class RequestManager implements NodeListener, HighLevelProgressListener { +public class RequestManager implements NodeListener { /** Logger. */ private static final Logger logger = Logging.getLogger(RequestManager.class.getName()); @@ -59,8 +49,7 @@ public class RequestManager implements NodeListener, HighLevelProgressListener { private NodeManager nodeManager; /** Request lists for all nodes. */ - @SuppressWarnings("unused") - private Map> nodeRequests = Collections.synchronizedMap(new HashMap>()); + private Map> nodeRequests = Collections.synchronizedMap(new HashMap>()); // // EVENT MANAGEMENT @@ -68,7 +57,7 @@ public class RequestManager implements NodeListener, HighLevelProgressListener { /** * Adds a request listener. - * + * * @param requestListener * The request listener to add */ @@ -78,7 +67,7 @@ public class RequestManager implements NodeListener, HighLevelProgressListener { /** * Removes a request listener. - * + * * @param requestListener * The request listener to remove */ @@ -88,42 +77,65 @@ public class RequestManager implements NodeListener, HighLevelProgressListener { /** * Notifies all listeners that a request was added. - * - * @param node - * The node that added the request + * * @param request * The request that was added */ - private void fireRequestAdded(Node node, Request request) { - for (RequestListener requestListener: requestListeners) { - requestListener.requestAdded(node, request); + private void fireRequestAdded(Request request) { + for (RequestListener requestListener : requestListeners) { + requestListener.requestAdded(request); } } /** * Notifies all listeners that a request progressed. - * - * @param node - * The node that runs the request + * * @param request * The request - * @param totalBlocks - * The total number of blocks - * @param requiredBlocks - * The number of required blocks - * @param successfulBlocks - * The number of successful blocks - * @param failedBlocks - * The number of failed blocks - * @param fatallyFailedBlocks - * The number of fatally failed blocks - * @param finalizedTotal - * true if the total number of blocks in final, - * false otherwise */ - private void fireRequestProgressed(Node node, Request request, int totalBlocks, int requiredBlocks, int successfulBlocks, int failedBlocks, int fatallyFailedBlocks, boolean finalizedTotal) { - for (RequestListener requestListener: requestListeners) { - requestListener.requestProgressed(node, request, totalBlocks, requiredBlocks, successfulBlocks, failedBlocks, fatallyFailedBlocks, finalizedTotal); + private void fireRequestProgressed(Request request) { + for (RequestListener requestListener : requestListeners) { + requestListener.requestProgressed(request); + } + } + + /** + * Notifies all listeners that a request was removed. + * + * @param request + * The request that was removed + */ + private void fireRequestRemoved(Request request) { + for (RequestListener requestListener : requestListeners) { + requestListener.requestRemoved(request); + } + } + + /** + * Notifies all listeners that a request has finished. + * + * @see RequestListener#requestFinished(Request) + * @param request + * The request that has finished + */ + private void fireRequestFinished(Request request) { + for (RequestListener requestListener : requestListeners) { + requestListener.requestFinished(request); + } + } + + /** + * Notifies all listeners that a request has generated a URI. + * + * @see RequestListener#requestGeneratedURI(Request, String) + * @param request + * The request that has generated a URI + * @param uri + * The generated URI + */ + private void fireRequestGeneratedURI(Request request, String uri) { + for (RequestListener requestListener : requestListeners) { + requestListener.requestGeneratedURI(request, uri); } } @@ -133,7 +145,7 @@ public class RequestManager implements NodeListener, HighLevelProgressListener { /** * Sets the node manager to use. - * + * * @param nodeManager * The node manager */ @@ -152,41 +164,15 @@ public class RequestManager implements NodeListener, HighLevelProgressListener { /** * Requests a list of all running requests from a node. This method will * block until the request has been sent! - * + * * @param node * The node to get all requests for * @throws IOException * if an I/O error occurs while communicating with the node + * @throws JSiteException + * if there is a problem with the node */ - private void getRequests(final Node node) throws IOException { - HighLevelClient highLevelClient = nodeManager.borrowHighLevelClient(node); - if (highLevelClient == null) { - logger.log(Level.WARNING, "no client for node: " + node); - return; - } - try { - HighLevelCallback requestListCallback = highLevelClient.getRequests(); - requestListCallback.addHighLevelCallbackListener(new HighLevelCallbackListener() { - - @SuppressWarnings("synthetic-access") - public void gotResult(HighLevelCallback highLevelCallback) { - RequestListResult requestListResult; - try { - requestListResult = highLevelCallback.getResult(); - } catch (InterruptedException e) { - logger.log(Level.SEVERE, "getResult() blocked and was interrupted"); - return; - } - for (RequestResult requestResult: requestListResult) { - Request request = new Request(requestResult.getIdentifier()); - /* TODO - fill request */ - fireRequestAdded(node, request); - } - } - }); - } finally { - nodeManager.returnHighLevelClient(highLevelClient); - } + private void getRequests(final Node node) throws IOException, JSiteException { } // @@ -197,64 +183,40 @@ public class RequestManager implements NodeListener, HighLevelProgressListener { * {@inheritDoc} */ public void nodeAdded(Node node) { - HighLevelClient highLevelClient = nodeManager.borrowHighLevelClient(node); - if (highLevelClient == null) { - return; - } - try { - highLevelClient.addHighLevelProgressListener(this); - } finally { - nodeManager.returnHighLevelClient(highLevelClient); - } } /** * {@inheritDoc} */ public void nodeRemoved(Node node) { - /* ignore. */ } /** * {@inheritDoc} */ public void nodeConnected(Node node) { - HighLevelClient highLevelClient = nodeManager.borrowHighLevelClient(node); - if (highLevelClient == null) { - logger.log(Level.WARNING, "got no high-level client for node " + node); - return; - } - try { - highLevelClient.setWatchGlobal(true); - } catch (IOException ioe1) { - /* ignore exception, disconnects are handled elsewhere. */ - } finally { - nodeManager.returnHighLevelClient(highLevelClient); - } - try { - getRequests(node); - } catch (IOException e) { - /* ignore exception, disconnects are handled elsewhere. */ - } } /** * {@inheritDoc} */ - public void nodeDisconnected(Node node, Throwable throwable) { - /* TODO - remove all requests. */ + public void nodeConnectionFailed(Node node, Throwable cause) { + /* we don't care about this. */ } - // - // INTERFACE HighLevelProgressListener - // - /** - * @see net.pterodactylus.fcp.highlevel.HighLevelProgressListener#progressReceived(java.lang.String, - * net.pterodactylus.fcp.highlevel.HighLevelProgress) + * {@inheritDoc} */ - public void progressReceived(String identifier, HighLevelProgress highLevelProgress) { - fireRequestProgressed(null, new Request(identifier), highLevelProgress.getTotalBlocks(), highLevelProgress.getRequiredBlocks(), highLevelProgress.getSuccessfulBlocks(), highLevelProgress.getFailedBlocks(), highLevelProgress.getFatallyFailedBlocks(), highLevelProgress.isTotalFinalized()); + public void nodeDisconnected(Node node, Throwable throwable) { + Map identifierRequests = nodeRequests.get(node); + if (identifierRequests == null) { + logger.warning("got node without request map: " + node); + return; + } + for (Request request : identifierRequests.values()) { + fireRequestRemoved(request); + } + identifierRequests.clear(); } }