From 59720ad8fe0e1c2e8667d4b514f2523a924959ce Mon Sep 17 00:00:00 2001
From: David Bohn <david@cancrisoft.net>
Date: Tue, 14 Jun 2016 23:32:44 +0200
Subject: [PATCH] Enabled network-wide access and enabled name entry for remote
 launch

---
 src/main/java/fucoin/Main.java                | 11 +++++++-
 src/main/java/fucoin/MainRemote.java          | 28 ++++++++++++++++---
 .../java/fucoin/gui/WalletGuiControlImpl.java | 20 ++++++++-----
 3 files changed, 47 insertions(+), 12 deletions(-)

diff --git a/src/main/java/fucoin/Main.java b/src/main/java/fucoin/Main.java
index 0a37e3a..4cdd54c 100644
--- a/src/main/java/fucoin/Main.java
+++ b/src/main/java/fucoin/Main.java
@@ -11,6 +11,8 @@ import fucoin.supervisor.SuperVisorImpl;
 import fucoin.wallet.WalletImpl;
 
 import java.io.File;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -26,6 +28,13 @@ public class Main {
     private static List<ActorRef> cActiveActors = new ArrayList<>();
 
     static {
+        String hostname = "127.0.0.1";
+        try {
+            // Fetch IP address to enable network connection
+            hostname = InetAddress.getLocalHost().getHostAddress();
+        } catch (UnknownHostException e) {
+            e.printStackTrace();
+        }
         //Load configuration from current directory or from resources directory of jar
         File file = new File("application.conf");
         Config config = ConfigFactory.parseFile(file);
@@ -37,7 +46,7 @@ public class Main {
         }
 
         //Init System Actor System
-        cSystem = ActorSystem.create("Core", config);
+        cSystem = ActorSystem.create("Core", ConfigFactory.parseString("akka.remote.netty.tcp.hostname=" + hostname).withFallback(config));
         cSuperVisorActor = cSystem.actorOf(SuperVisorImpl.props(), "SuperVisorImpl");
         System.out.print("Supervisor address: ");
         System.out.println(cSuperVisorActor.path().toStringWithAddress(cSystem.provider().getDefaultAddress()));
diff --git a/src/main/java/fucoin/MainRemote.java b/src/main/java/fucoin/MainRemote.java
index 3d90062..02d8e9f 100644
--- a/src/main/java/fucoin/MainRemote.java
+++ b/src/main/java/fucoin/MainRemote.java
@@ -6,7 +6,6 @@ import java.util.concurrent.TimeUnit;
 import akka.actor.ActorRef;
 import akka.actor.ActorSelection;
 import akka.actor.ActorSystem;
-import akka.actor.Address;
 
 import akka.util.Timeout;
 import com.typesafe.config.Config;
@@ -19,6 +18,9 @@ import javax.swing.*;
 public class MainRemote {
     public static ActorRef remoteSuperVisorActor;
 
+    private static JTextField walletNameField = new JTextField(5);
+    private static JTextField pathField = new JTextField(5);
+
     public static void main(String[] args) throws InterruptedException {
 
         //Load configuration from current directory or from resources directory of jar
@@ -34,14 +36,22 @@ public class MainRemote {
         //Init System Actor System
         ActorSystem system = ActorSystem.create("Remote", config);
 
+        JPanel dialogPanel = createDialogPanel();
 
         Timeout timeout = new Timeout(5, TimeUnit.SECONDS);
         ActorRef preknownNeighbour = null;
 
+        String walletName = null;
+        String path = null;
+
         while (preknownNeighbour == null) {
 
-            // get an address from a node which should be our preknown neighbour
-            String path = JOptionPane.showInputDialog(null, "Enter a neighbour node address: ");
+            int result = JOptionPane.showConfirmDialog(null, dialogPanel, "Connect to wallet network", JOptionPane.OK_CANCEL_OPTION);
+
+            if (result == JOptionPane.OK_OPTION) {
+                walletName = walletNameField.getText();
+                path = pathField.getText();
+            }
 
             // terminate if user clicked abort
             if (path == null) {
@@ -59,7 +69,17 @@ public class MainRemote {
         }
 
         // spawn wallet
-        system.actorOf(WalletImpl.props(preknownNeighbour, "Remote1"), "Remote1");
+        system.actorOf(WalletImpl.props(preknownNeighbour, walletName), walletName);
+
+    }
 
+    private static JPanel createDialogPanel() {
+        JPanel dialogPanel = new JPanel();
+        dialogPanel.setLayout(new BoxLayout(dialogPanel, BoxLayout.PAGE_AXIS));
+        dialogPanel.add(new JLabel("Pick your wallet name: "));
+        dialogPanel.add(walletNameField);
+        dialogPanel.add(new JLabel("Enter a neighbour node address: "));
+        dialogPanel.add(pathField);
+        return dialogPanel;
     }
 }
diff --git a/src/main/java/fucoin/gui/WalletGuiControlImpl.java b/src/main/java/fucoin/gui/WalletGuiControlImpl.java
index 518ee80..dbc8651 100644
--- a/src/main/java/fucoin/gui/WalletGuiControlImpl.java
+++ b/src/main/java/fucoin/gui/WalletGuiControlImpl.java
@@ -17,7 +17,7 @@ public class WalletGuiControlImpl implements WalletGuiControl {
     private JLabel lblMyAddress = new JLabel("My Address:");
     private JTextField txtMyAddress = new JTextField("<MyAddress>");
     private JLabel lblEmpty = new JLabel("");
-    private JLabel lblMyAmount = new JLabel("My FUCs");
+    private JLabel lblMyAmount = new JLabel("My FUCs:");
     private JTextField txtMyAmount = new JTextField("<MyFUCs>");
     private JPanel centerPanel = new JPanel();
     private JLabel lblSendTo = new JLabel("Send to:");
@@ -37,14 +37,20 @@ public class WalletGuiControlImpl implements WalletGuiControl {
 
         window.setSize(400, 600);
         window.setLayout(new GridLayout(3, 1));
-        topPanel.setLayout(new GridLayout(2, 3));
+        topPanel.setLayout(new GridLayout(2, 1));
         // Row 1
-        topPanel.add(lblMyAddress);
-        topPanel.add(txtMyAddress);
-        topPanel.add(lblEmpty);
+        JPanel row1 = new JPanel();
+        row1.setLayout(new BoxLayout(row1, BoxLayout.PAGE_AXIS));
+        row1.add(lblMyAddress);
+        row1.add(txtMyAddress);
+        topPanel.add(row1);
         // Row 2
-        topPanel.add(lblMyAmount);
-        topPanel.add(txtMyAmount);
+        JPanel row2 = new JPanel();
+        row2.setLayout(new GridLayout(1, 3));
+        row2.add(lblMyAmount);
+        row2.add(txtMyAmount);
+        row2.add(lblEmpty);
+        topPanel.add(row2);
         window.add(topPanel);
         //<hr>
         centerPanel.setLayout(new GridLayout(4, 1));
-- 
GitLab