X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fnet%2Fpterodactylus%2Fjsite%2Fcore%2FNodeManager.java;h=957e1bc33a92f9574a954f6169007bcb38ae411f;hb=f09a940c1098882fb137ad0b96e8bc9835170d3f;hp=02f03b37bf674bb5edcb1fff977c280d4d56cd54;hpb=587bc80b5c501f76b19890370810bb76bd6b55d6;p=jSite2.git diff --git a/src/net/pterodactylus/jsite/core/NodeManager.java b/src/net/pterodactylus/jsite/core/NodeManager.java index 02f03b3..957e1bc 100644 --- a/src/net/pterodactylus/jsite/core/NodeManager.java +++ b/src/net/pterodactylus/jsite/core/NodeManager.java @@ -31,10 +31,12 @@ import java.net.UnknownHostException; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Properties; +import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; @@ -70,16 +72,19 @@ public class NodeManager implements Iterable, PropertyChangeListener, High private final NodeListenerSupport nodeListenerSupport = new NodeListenerSupport(); /** All nodes. */ - private List nodes = Collections.synchronizedList(new ArrayList()); + private final List nodes = Collections.synchronizedList(new ArrayList()); /** Map from node ID to node. */ - private Map idNodes = Collections.synchronizedMap(new HashMap()); + private final Map idNodes = Collections.synchronizedMap(new HashMap()); /** All FCP connections. */ - private Map nodeClients = Collections.synchronizedMap(new HashMap()); + private final Map nodeClients = Collections.synchronizedMap(new HashMap()); /** Maps nodes to high-level clients. */ - private Map clientNodes = Collections.synchronizedMap(new HashMap()); + private final Map clientNodes = Collections.synchronizedMap(new HashMap()); + + /** Collection of currently connected nodes. */ + private final Set connectedNodes = Collections.synchronizedSet(new HashSet()); /** * Creates a new FCP collector. @@ -144,6 +149,18 @@ public class NodeManager implements Iterable, PropertyChangeListener, High } /** + * Returns whether the given node is currently connected. + * + * @param node + * The node to check + * @return true if the node is currently connected, + * false otherwise + */ + public boolean isNodeConnected(Node node) { + return connectedNodes.contains(node); + } + + /** * {@inheritDoc} */ public Iterator iterator() { @@ -435,6 +452,7 @@ public class NodeManager implements Iterable, PropertyChangeListener, High logger.log(Level.WARNING, "got event for unknown client"); return; } + connectedNodes.add(node); nodeListenerSupport.fireNodeConnected(node); } @@ -449,6 +467,7 @@ public class NodeManager implements Iterable, PropertyChangeListener, High logger.log(Level.WARNING, "got event for unknown client"); return; } + connectedNodes.remove(node); nodeListenerSupport.fireNodeDisconnected(node, throwable); } }