Notify listeners when a node was connected successfully.
[jSite2.git] / src / net / pterodactylus / jsite / core / NodeManager.java
index 8745cba..3a1f68b 100644 (file)
@@ -27,6 +27,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;
@@ -39,6 +40,8 @@ import java.util.Set;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+import net.pterodactylus.fcp.highlevel.FcpClient;
+import net.pterodactylus.fcp.highlevel.FcpException;
 import net.pterodactylus.jsite.util.IdGenerator;
 import net.pterodactylus.util.io.Closer;
 import net.pterodactylus.util.logging.Logging;
@@ -72,6 +75,9 @@ public class NodeManager implements Iterable<Node>, PropertyChangeListener {
        /** Map from node ID to node. */
        private final Map<String, Node> idNodes = Collections.synchronizedMap(new HashMap<String, Node>());
 
+       /** Map from node to client. */
+       private final Map<Node, FcpClient> nodeClients = Collections.synchronizedMap(new HashMap<Node, FcpClient>());
+
        /** Collection of currently connected nodes. */
        private final Set<Node> connectedNodes = Collections.synchronizedSet(new HashSet<Node>());
 
@@ -311,6 +317,21 @@ public class NodeManager implements Iterable<Node>, PropertyChangeListener {
         */
        public void connect(Node node) {
                logger.log(Level.FINEST, "connect(node=" + node + ")");
+               if (!nodes.contains(node)) {
+                       logger.log(Level.WARNING, "Was told to connect to node (" + node + ") I don’t know about!");
+                       return;
+               }
+               try {
+                       FcpClient fcpClient = new FcpClient(clientName, node.getHostname(), node.getPort());
+                       fcpClient.connect();
+                       nodeListenerSupport.fireNodeConnected(node);
+               } catch (UnknownHostException uhe1) {
+                       nodeListenerSupport.fireNodeConnectionFailed(node, uhe1);
+               } catch (IOException ioe1) {
+                       nodeListenerSupport.fireNodeConnectionFailed(node, ioe1);
+               } catch (FcpException fe1) {
+                       nodeListenerSupport.fireNodeConnectionFailed(node, fe1);
+               }
        }
 
        /**