WIP
[jSite2.git] / src / net / pterodactylus / jsite / core / NodeManager.java
index b919cfe..971d5c5 100644 (file)
@@ -25,6 +25,7 @@ import java.io.FileOutputStream;
 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;
@@ -257,10 +258,9 @@ public class NodeManager implements Iterable<Node>, HighLevelClientListener {
                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);
+                       }
                }
        }
 
@@ -301,11 +301,17 @@ public class NodeManager implements Iterable<Node>, HighLevelClientListener {
         * @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);
                        }
                }
@@ -337,13 +343,11 @@ public class NodeManager implements Iterable<Node>, HighLevelClientListener {
         *            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);