package net.pterodactylus.jsite.core;
+import java.net.UnknownHostException;
import java.util.List;
/**
*
* @param node
* The node to add
+ * @throws UnknownHostException
+ * if the hostname of the node can not be resolved
*/
- public void addNode(Node node);
+ public void addNode(Node node) throws UnknownHostException;
/**
* Removes the given node from the core.
*/
public void disconnectFromNode(Node node);
-}
\ No newline at end of file
+}
package net.pterodactylus.jsite.core;
import java.io.IOException;
+import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;
}
}
+ /**
+ * 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
+ * <code>true</code> if the total number of blocks in final,
+ * <code>false</code> otherwise
+ */
+ private void fireRequestProgressed(Node node, Request request, int totalBlocks, int requiredBlocks, int successfulBlocks, int failedBlocks, int fatallyFailedBlocks, boolean finalizedTotal) {
+ for (CoreListener coreListener: coreListeners) {
+ coreListener.requestProgressed(request, totalBlocks, requiredBlocks, successfulBlocks, failedBlocks, fatallyFailedBlocks, finalizedTotal);
+ }
+ }
+
//
// ACCESSORS
//
/**
* {@inheritDoc}
*/
- public void addNode(Node node) {
+ public void addNode(Node node) throws UnknownHostException {
nodeManager.addNode(node);
fireNodeAdded(node);
}
*/
public void connectToNode(Node node) {
fireNodeConnecting(node);
- nodeManager.addNode(node);
nodeManager.connect(node);
}
fireRequestAdded(node, request);
}
+ /**
+ * @see net.pterodactylus.jsite.core.RequestListener#requestProgressed(net.pterodactylus.jsite.core.Node,
+ * net.pterodactylus.jsite.core.Request, int, int, int, int, int,
+ * boolean)
+ */
+ public void requestProgressed(Node node, Request request, int totalBlocks, int requiredBlocks, int successfulBlocks, int failedBlocks, int fatallyFailedBlocks, boolean finalizedTotal) {
+ fireRequestProgressed(node, request, totalBlocks, requiredBlocks, successfulBlocks, failedBlocks, fatallyFailedBlocks, finalizedTotal);
+ }
}
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
logger.fine("loaded " + loadedNodes.size() + " nodes from config");
synchronized (syncObject) {
nodes.clear();
- nodes.addAll(loadedNodes);
- }
- for (Node node: nodes) {
- fireNodeAdded(node);
+ for (Node node: nodes) {
+ addNode(node);
+ }
}
}
* @see #connect(Node)
* @param node
* The node to connect to
+ * @throws UnknownHostException
+ * if the hostname of the node can not be resolved
*/
- public void addNode(Node node) {
+ public void addNode(Node node) throws UnknownHostException {
synchronized (syncObject) {
if (!nodes.contains(node)) {
+ HighLevelClient highLevelClient= new HighLevelClient(clientName, node.getHostname(), node.getPort());
nodes.add(node);
+ clientNodes.put(highLevelClient, node);
+ nodeClients.put(node, highLevelClient);
+ highLevelClient.addHighLevelClientListener(this);
fireNodeAdded(node);
}
}
* The node to connect to
*/
public void connect(Node node) {
+ HighLevelClient highLevelClient;
+ synchronized (syncObject) {
+ highLevelClient = nodeClients.get(node);
+ }
try {
- HighLevelClient highLevelClient = new HighLevelClient(clientName, node.getHostname(), node.getPort());
- synchronized (syncObject) {
- clientNodes.put(highLevelClient, node);
- nodeClients.put(node, highLevelClient);
- }
- highLevelClient.addHighLevelClientListener(this);
highLevelClient.connect();
} catch (IOException ioe1) {
fireNodeDisconnected(node, ioe1);
*/
public void requestAdded(Node node, Request request);
+ /**
+ * Notifies a listener that a request made progress.
+ *
+ * @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
+ * <code>true</code> if the total number of blocks in final,
+ * <code>false</code> otherwise
+ */
+ public void requestProgressed(Node node, Request request, int totalBlocks, int requiredBlocks, int successfulBlocks, int failedBlocks, int fatallyFailedBlocks, boolean finalizedTotal);
+
}
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;
* @author David ‘Bombe’ Roden <bombe@freenetproject.org>
* @version $Id$
*/
-public class RequestManager implements NodeListener {
+public class RequestManager implements NodeListener, HighLevelProgressListener {
/** Logger. */
private static final Logger logger = Logging.getLogger(RequestManager.class.getName());
}
}
+ /**
+ * 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
+ * <code>true</code> if the total number of blocks in final,
+ * <code>false</code> 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);
+ }
+ }
+
//
// ACCESSORS
//
* {@inheritDoc}
*/
public void nodeAdded(Node node) {
- /* ignore. */
+ HighLevelClient highLevelClient = nodeManager.borrowHighLevelClient(node);
+ if (highLevelClient == null) {
+ return;
+ }
+ try {
+ highLevelClient.addHighLevelProgressListener(this);
+ } finally {
+ nodeManager.returnHighLevelClient(highLevelClient);
+ }
}
/**
/* TODO - remove all requests. */
}
+ //
+ // INTERFACE HighLevelProgressListener
+ //
+
+ /**
+ * @see net.pterodactylus.fcp.highlevel.HighLevelProgressListener#progressReceived(java.lang.String,
+ * net.pterodactylus.fcp.highlevel.HighLevelProgress)
+ */
+ 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 requestProgressed(Request request, int totalBlocks, int requiredBlocks, int successfulBlocks, int failedBlocks, int fatallyFailedBlocks, boolean finalizedTotal) {
/* TODO - update table model */
+ mainWindow.setStatusBarText(request.getIdentifier() + " @ " + ((10000 * successfulBlocks / requiredBlocks) / 100.0));
}
//