diff --git a/src/main/java/fucoin/Main.java b/src/main/java/fucoin/Main.java index 892daeb04017a834dfa2bd5d9c2b2a053cf0571b..c715d6ffd66799df36f686e6607c96a3c2ec9a43 100644 --- a/src/main/java/fucoin/Main.java +++ b/src/main/java/fucoin/Main.java @@ -6,12 +6,11 @@ import akka.actor.Props; import com.typesafe.config.Config; import com.typesafe.config.ConfigFactory; import fucoin.actions.join.ActionJoinAnswer; +import fucoin.setup.NetworkInterfaceReader; 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; @@ -27,13 +26,8 @@ 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(); - } + String hostname = NetworkInterfaceReader.readDefaultHostname(); + //Load configuration from current directory or from resources directory of jar File file = new File("application.conf"); Config config = ConfigFactory.parseFile(file); @@ -47,8 +41,6 @@ public class Main { //Init System Actor System 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())); } public static void main(String[] args) throws InterruptedException { diff --git a/src/main/java/fucoin/MainRemote.java b/src/main/java/fucoin/MainRemote.java index 9eea194e5b35dda55d3c35d2bb24db54218b09d3..67c8520b0547a598a0cdc321c450324e1efca881 100644 --- a/src/main/java/fucoin/MainRemote.java +++ b/src/main/java/fucoin/MainRemote.java @@ -6,6 +6,7 @@ import akka.actor.ActorSystem; import akka.util.Timeout; import com.typesafe.config.Config; import com.typesafe.config.ConfigFactory; +import fucoin.setup.NetworkInterfaceReader; import fucoin.setup.SelectableNetworkInterface; import fucoin.setup.SetupDialogPanel; import fucoin.wallet.WalletImpl; @@ -14,20 +15,13 @@ import scala.concurrent.duration.FiniteDuration; import javax.swing.*; import java.io.File; -import java.net.*; import java.util.concurrent.TimeUnit; public class MainRemote { public static void main(String[] args) throws InterruptedException { - String hostname = "127.0.0.1"; - try { - // Fetch IP address to enable network connection - hostname = InetAddress.getLocalHost().getHostAddress(); - } catch (UnknownHostException e) { - e.printStackTrace(); - } + String hostname = NetworkInterfaceReader.readDefaultHostname(); //Load configuration from current directory or from resources directory of jar File file = new File("application.conf"); diff --git a/src/main/java/fucoin/actions/Action.java b/src/main/java/fucoin/actions/Action.java index cb4b42a6806ae640ee2a147ab254db4e81a63250..2704740195efebcb6e8aa2bd63b394e3263f95de 100644 --- a/src/main/java/fucoin/actions/Action.java +++ b/src/main/java/fucoin/actions/Action.java @@ -6,7 +6,7 @@ import fucoin.AbstractNode; import java.io.Serializable; -public abstract class Action<T extends AbstractNode> implements Serializable{ +public abstract class Action<T extends AbstractNode> implements Serializable { private ActorRef self; public final void doAction(T abstractNode) { diff --git a/src/main/java/fucoin/actions/join/ActionJoinAnswer.java b/src/main/java/fucoin/actions/join/ActionJoinAnswer.java index 09d48ac7bb6b59b592621ff627446987c0446e15..49cecf1d89a416a85ed8c6749cdfa841da57d232 100644 --- a/src/main/java/fucoin/actions/join/ActionJoinAnswer.java +++ b/src/main/java/fucoin/actions/join/ActionJoinAnswer.java @@ -5,13 +5,14 @@ import akka.actor.UntypedActorContext; import fucoin.actions.ClientAction; import fucoin.actions.persist.ActionSearchMyWallet; import fucoin.wallet.AbstractWallet; + import java.util.HashMap; import java.util.Map.Entry; /** * This action is the response from a wallet which is already in the network * to a wallet which wants to join the network. - * + * <p> * The node in the network sends all its known neighbours which then become * neighbours of the new node. This action also contains a reference to the * supervisor. If this is the first time the new node learned about the systems diff --git a/src/main/java/fucoin/actions/persist/Persist.java b/src/main/java/fucoin/actions/persist/Persist.java index 1a42e145ad17ba914350aa5c55efe3fa320dad4a..75574a7f1d925d0dbba50602024b00a6df9f3822 100644 --- a/src/main/java/fucoin/actions/persist/Persist.java +++ b/src/main/java/fucoin/actions/persist/Persist.java @@ -2,6 +2,6 @@ package fucoin.actions.persist; import fucoin.actions.ClientAction; -public abstract class Persist extends ClientAction{ - +public abstract class Persist extends ClientAction { + } diff --git a/src/main/java/fucoin/actions/transaction/ActionCommitDistributedCommittedTransfer.java b/src/main/java/fucoin/actions/transaction/ActionCommitDistributedCommittedTransfer.java index 085dd2a081c47376f9a9533fea7d7e7189eee179..884c132f99f58f41c58ce6de15df90ca162fbfec 100644 --- a/src/main/java/fucoin/actions/transaction/ActionCommitDistributedCommittedTransfer.java +++ b/src/main/java/fucoin/actions/transaction/ActionCommitDistributedCommittedTransfer.java @@ -58,8 +58,8 @@ public class ActionCommitDistributedCommittedTransfer extends ClientAction { } else { wallet.log("abort transaction with id" + id); - if (source.compareTo(self) == 0){ - wallet.logTransactionFail("Failed to send "+amount+" FUC to "+target.path().name()+" (Commit has not been granted)"); + if (source.compareTo(self) == 0) { + wallet.logTransactionFail("Failed to send " + amount + " FUC to " + target.path().name() + " (Commit has not been granted)"); } } diff --git a/src/main/java/fucoin/actions/transaction/ActionGetAmountAnswer.java b/src/main/java/fucoin/actions/transaction/ActionGetAmountAnswer.java index 6113cde0c3ceb054a314a71792192b425637060c..272c8d6d9d33913a1840515c924d21b28134dccd 100644 --- a/src/main/java/fucoin/actions/transaction/ActionGetAmountAnswer.java +++ b/src/main/java/fucoin/actions/transaction/ActionGetAmountAnswer.java @@ -7,20 +7,20 @@ import fucoin.wallet.WalletImpl; public class ActionGetAmountAnswer extends Transaction { - public String address; - public String name; - public int amount; + public String address; + public String name; + public int amount; - public ActionGetAmountAnswer(String address, String name, int amount) { - this.address=address; - this.name=name; - this.amount=amount; - } + public ActionGetAmountAnswer(String address, String name, int amount) { + this.address = address; + this.name = name; + this.amount = amount; + } - @Override - protected void onAction(ActorRef sender, ActorRef self, - UntypedActorContext context, AbstractWallet wallet) { - wallet.amounts.put(sender, amount); - } + @Override + protected void onAction(ActorRef sender, ActorRef self, + UntypedActorContext context, AbstractWallet wallet) { + wallet.amounts.put(sender, amount); + } } diff --git a/src/main/java/fucoin/actions/transaction/ActionPrepareDistributedCommittedTransferAnswer.java b/src/main/java/fucoin/actions/transaction/ActionPrepareDistributedCommittedTransferAnswer.java index a408f4f194f7fd428da7e7d89c4fabc60a46b2d2..3d2a0c094016678fe8d9ec18d64fed148be73eaa 100644 --- a/src/main/java/fucoin/actions/transaction/ActionPrepareDistributedCommittedTransferAnswer.java +++ b/src/main/java/fucoin/actions/transaction/ActionPrepareDistributedCommittedTransferAnswer.java @@ -7,51 +7,51 @@ import akka.actor.UntypedActorContext; public class ActionPrepareDistributedCommittedTransferAnswer extends CoordinatorTransaction { - private ActorRef source; - private ActorRef target; - private int amount; - private boolean granted; - private long timestamp; - private long id; + private ActorRef source; + private ActorRef target; + private int amount; + private boolean granted; + private long timestamp; + private long id; - public ActionPrepareDistributedCommittedTransferAnswer(ActorRef source, - ActorRef target, int amount, long timestamp, boolean granted, long id) { - this.source=source; - this.target=target; - this.amount=amount; - this.granted=granted; - this.timestamp=timestamp; - this.id=id; - } + public ActionPrepareDistributedCommittedTransferAnswer(ActorRef source, + ActorRef target, int amount, long timestamp, boolean granted, long id) { + this.source = source; + this.target = target; + this.amount = amount; + this.granted = granted; + this.timestamp = timestamp; + this.id = id; + } - @Override - protected void onAction(ActorRef sender, ActorRef self, - UntypedActorContext context, SuperVisorImpl superVisor) { - superVisor.log(""+superVisor.getKnownNeighbors()); - superVisor.log("granted?"+granted); - DistributedCommittedTransferRequest request = superVisor.getRequest(id); - if(granted){ - if(request==null)//unknown DistributedCommittedTransferRequest ignore - return; - int newCount = request.addPositiveAnswer(sender); + @Override + protected void onAction(ActorRef sender, ActorRef self, + UntypedActorContext context, SuperVisorImpl superVisor) { + superVisor.log("" + superVisor.getKnownNeighbors()); + superVisor.log("granted?" + granted); + DistributedCommittedTransferRequest request = superVisor.getRequest(id); + if (granted) { + if (request == null)//unknown DistributedCommittedTransferRequest ignore + return; + int newCount = request.addPositiveAnswer(sender); - if(newCount == superVisor.getKnownNeighbors().size()){ - ActionCommitDistributedCommittedTransfer acdct = new ActionCommitDistributedCommittedTransfer(source,target,amount,true,timestamp,id); - for(ActorRef neighbor : request.getAnswers()){ - neighbor.tell(acdct, self); - } - superVisor.deleteRequest(request); - } - }else{ - //A client wants to rollback - if(request!=null){ - superVisor.log("Client does not grant commit of "+amount+" FUC ("+source.path().name()+" -> "+target.path().name()+")"); - ActionCommitDistributedCommittedTransfer acdct = new ActionCommitDistributedCommittedTransfer(source,target,amount,false,timestamp,id); - for(ActorRef neighbor : request.getAnswers()){ - neighbor.tell(acdct, self); - } - } - } - } + if (newCount == superVisor.getKnownNeighbors().size()) { + ActionCommitDistributedCommittedTransfer acdct = new ActionCommitDistributedCommittedTransfer(source, target, amount, true, timestamp, id); + for (ActorRef neighbor : request.getAnswers()) { + neighbor.tell(acdct, self); + } + superVisor.deleteRequest(request); + } + } else { + //A client wants to rollback + if (request != null) { + superVisor.log("Client does not grant commit of " + amount + " FUC (" + source.path().name() + " -> " + target.path().name() + ")"); + ActionCommitDistributedCommittedTransfer acdct = new ActionCommitDistributedCommittedTransfer(source, target, amount, false, timestamp, id); + for (ActorRef neighbor : request.getAnswers()) { + neighbor.tell(acdct, self); + } + } + } + } } diff --git a/src/main/java/fucoin/actions/transaction/SuperVisorAction.java b/src/main/java/fucoin/actions/transaction/SuperVisorAction.java index d65efc0648ebbb376e3535d12734bd03c300f027..19e93a885d76155f28378790bfd358a52c7a281c 100644 --- a/src/main/java/fucoin/actions/transaction/SuperVisorAction.java +++ b/src/main/java/fucoin/actions/transaction/SuperVisorAction.java @@ -1,7 +1,5 @@ package fucoin.actions.transaction; -import akka.actor.ActorRef; -import akka.actor.UntypedActorContext; import fucoin.actions.Action; import fucoin.supervisor.SuperVisorImpl; diff --git a/src/main/java/fucoin/gui/LogCellRenderer.java b/src/main/java/fucoin/gui/LogCellRenderer.java index 1c774a4297cdbc551add3c4decab6dc7cab0bd35..db7fb662f4f53ba07d9b90f29dfaf38ebdd59ba3 100644 --- a/src/main/java/fucoin/gui/LogCellRenderer.java +++ b/src/main/java/fucoin/gui/LogCellRenderer.java @@ -5,7 +5,7 @@ import java.awt.*; public class LogCellRenderer extends DefaultListCellRenderer { - private static final Color SUCCESS_COLOR = new Color(92, 184, 92); + private static final Color SUCCESS_COLOR = new Color(56, 127, 56); private static final Color FAIL_COLOR = new Color(217, 83, 79); @Override diff --git a/src/main/java/fucoin/gui/LogMessage.java b/src/main/java/fucoin/gui/LogMessage.java index 34b3000c40a1fdc0a1c1cba43ac1bbda0e611d5f..9b04de43e3509c43fed8e392b40c6357a77bb251 100644 --- a/src/main/java/fucoin/gui/LogMessage.java +++ b/src/main/java/fucoin/gui/LogMessage.java @@ -5,12 +5,12 @@ public class LogMessage { public enum Context { TRANSACTION_SUCCESS, TRANSACTION_FAIL, DEBUG - }; + } private String message; private Context context; - public LogMessage(String message){ + public LogMessage(String message) { this(message, Context.DEBUG); } diff --git a/src/main/java/fucoin/gui/WalletCoreGui.java b/src/main/java/fucoin/gui/WalletCoreGui.java deleted file mode 100644 index 1f728d33631782f113e06b071f5d95366a7fe31e..0000000000000000000000000000000000000000 --- a/src/main/java/fucoin/gui/WalletCoreGui.java +++ /dev/null @@ -1,47 +0,0 @@ -package fucoin.gui; - -import akka.actor.Address; -import akka.actor.AddressFromURIString; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; - -public class WalletCoreGui { - public WalletCoreGui() { - JFrame frame = new JFrame("Manager"); - frame.setLayout(new GridLayout(3, 2)); - frame.add(new JLabel("Connect to:")); - JTextField input = new JTextField("akka://MySystem/user/main"); - frame.add(input); - frame.add(new JLabel("Name:")); - JTextField name = new JTextField("<Name>"); - frame.add(name); - JButton button = new JButton("connect"); - button.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - /*MessageDispatcherConfigurator mc = null; - String id = input.getText()+"-dispatched"; - int hroughput = 1; - Duration d = Duration.ofSeconds(2); - - - Dispatcher d = new Dispatcher(mc,id, 1, d, Executors.newSingleThreadExecutor(),1000);*/ - String path = "akka.tcp://Test@127.0.0.1:1234/user/main"; - Address addr = AddressFromURIString.parse(path); - //RemoteScope remoteScope = new RemoteScope(addr); - //Deploy deploy = new Deploy(remoteScope); - //Props remoteWallet = Props.apply(deploy, WalletImpl.class, null); - - - } - }); - - frame.add(button); - frame.setSize(300, 300); - frame.setVisible(true); - } -} diff --git a/src/main/java/fucoin/setup/NetworkInterfaceReader.java b/src/main/java/fucoin/setup/NetworkInterfaceReader.java index 2aa5db414cfdd547d2b722a1f7e6520b5b83a75b..47be4bd08a9aba83786c5e83d5aa07a2124ec957 100644 --- a/src/main/java/fucoin/setup/NetworkInterfaceReader.java +++ b/src/main/java/fucoin/setup/NetworkInterfaceReader.java @@ -1,9 +1,6 @@ package fucoin.setup; -import java.net.Inet6Address; -import java.net.InetAddress; -import java.net.NetworkInterface; -import java.net.SocketException; +import java.net.*; import java.util.*; public class NetworkInterfaceReader { @@ -34,4 +31,19 @@ public class NetworkInterfaceReader { return map; } + + /** + * Get the IP address, that is resolved by the system from the host name. + * As a fallback, we return 127.0.0.1, i.e. localhost + */ + public static String readDefaultHostname() { + String hostname = "127.0.0.1"; + try { + hostname = InetAddress.getLocalHost().getHostAddress(); + } catch (UnknownHostException e) { + e.printStackTrace(); + } + + return hostname; + } } diff --git a/src/main/java/fucoin/setup/SetupDialogPanel.java b/src/main/java/fucoin/setup/SetupDialogPanel.java index 96e2cc7bcc9c9de65e4bf97fb1c7edb14f305024..d5d1edc9157031ad37a6c7bed18241c10e1125aa 100644 --- a/src/main/java/fucoin/setup/SetupDialogPanel.java +++ b/src/main/java/fucoin/setup/SetupDialogPanel.java @@ -44,11 +44,11 @@ public class SetupDialogPanel extends JPanel { walletNameField.addAncestorListener(new AncestorListener() { @Override public void ancestorAdded(AncestorEvent event) { - final AncestorListener al= this; + final AncestorListener al = this; SwingUtilities.invokeLater(() -> { JComponent component = event.getComponent(); component.requestFocusInWindow(); - component.removeAncestorListener( al ); + component.removeAncestorListener(al); }); } diff --git a/src/main/java/fucoin/supervisor/AmountTableModel.java b/src/main/java/fucoin/supervisor/AmountTableModel.java index 6c1d1184b087a0e39c7121573a89b742c0b4c535..b25a22f139b2b4f37749b33604d65c55e5b4d65a 100644 --- a/src/main/java/fucoin/supervisor/AmountTableModel.java +++ b/src/main/java/fucoin/supervisor/AmountTableModel.java @@ -19,13 +19,13 @@ public class AmountTableModel extends DefaultTableModel { Vector rows = this.getDataVector(); for (int i = 0; i < rows.size(); i++) { - if (rows.get(i) instanceof Vector){ - Vector<Object> row = (Vector<Object>) rows.get(i); - if(row.get(0).equals(address)){ - setValueAt(amount, i, 2); - return; - } - } + if (rows.get(i) instanceof Vector) { + Vector<Object> row = (Vector<Object>) rows.get(i); + if (row.get(0).equals(address)) { + setValueAt(amount, i, 2); + return; + } + } } this.addRow(new Object[]{address, name, amount}); diff --git a/src/main/java/fucoin/supervisor/DistributedCommittedTransferRequest.java b/src/main/java/fucoin/supervisor/DistributedCommittedTransferRequest.java index a3958498b57ac4da673b6a616e842d3941a3677f..d4ebd400373f9103c1ed6a5fa8b156b90e613003 100644 --- a/src/main/java/fucoin/supervisor/DistributedCommittedTransferRequest.java +++ b/src/main/java/fucoin/supervisor/DistributedCommittedTransferRequest.java @@ -61,7 +61,7 @@ public class DistributedCommittedTransferRequest extends Transaction { return id; } - public int getAmount(){ + public int getAmount() { return amount; } } diff --git a/src/main/java/fucoin/supervisor/SuperVisorImpl.java b/src/main/java/fucoin/supervisor/SuperVisorImpl.java index 9249ec47c1a745fd8699da8007c27131fbe3235b..1252f1c9c925c5e9e4fad02fcafd3c69ae2caebd 100644 --- a/src/main/java/fucoin/supervisor/SuperVisorImpl.java +++ b/src/main/java/fucoin/supervisor/SuperVisorImpl.java @@ -116,8 +116,8 @@ public class SuperVisorImpl extends AbstractNode { this.amountTableModel = amountTableModel; } - public void log(String message){ - if (this.gui != null){ + public void log(String message) { + if (this.gui != null) { this.gui.log(message); } else { System.out.println(message); diff --git a/src/main/java/fucoin/wallet/AbstractWallet.java b/src/main/java/fucoin/wallet/AbstractWallet.java index 2c7381e250ed62c132a47f07263f06277ae23192..bc44d051ec250a68db11f9e677b683f985a4c5b8 100644 --- a/src/main/java/fucoin/wallet/AbstractWallet.java +++ b/src/main/java/fucoin/wallet/AbstractWallet.java @@ -8,7 +8,7 @@ import java.io.Serializable; /** * */ -public abstract class AbstractWallet extends AbstractNode implements Serializable{ +public abstract class AbstractWallet extends AbstractNode implements Serializable { /** * Currently amount of this wallet @@ -55,12 +55,14 @@ public abstract class AbstractWallet extends AbstractNode implements Serializabl /** * Set new Amount of the wallet. + * * @param amount New amount of the wallet */ public abstract void setAmount(int amount); /** * Add amount to current amount. + * * @param amount value to add to current account. */ public abstract void addAmount(int amount); @@ -88,7 +90,6 @@ public abstract class AbstractWallet extends AbstractNode implements Serializabl public abstract ActorRef getRemoteSuperVisorActor(); /** - * * @param remoteSuperVisorActor */ public abstract void setRemoteSuperVisorActor(ActorRef remoteSuperVisorActor); @@ -111,7 +112,7 @@ public abstract class AbstractWallet extends AbstractNode implements Serializabl * Sends amount FUCs to the wallet with the address adress * * @param address Recipients address - * @param amount Amount to send + * @param amount Amount to send */ public abstract void send(String address, int amount); } diff --git a/src/main/java/fucoin/wallet/WalletImpl.java b/src/main/java/fucoin/wallet/WalletImpl.java index b81619a3de26f7b54be739685a5576a80be9c861..f35d620fb87a8629bb4238682c119e208b9158b2 100644 --- a/src/main/java/fucoin/wallet/WalletImpl.java +++ b/src/main/java/fucoin/wallet/WalletImpl.java @@ -26,7 +26,7 @@ public class WalletImpl extends AbstractWallet { public WalletImpl(ActorRef preKnownNeighbour, String walletName) { super(walletName); - if(preKnownNeighbour != null) { + if (preKnownNeighbour != null) { this.preKnownNeighbourName = preKnownNeighbour.path().name(); this.preKnownNeighbour = preKnownNeighbour; } @@ -147,7 +147,7 @@ public class WalletImpl extends AbstractWallet { @Override public void setRemoteSuperVisorActor(ActorRef remoteSuperVisorActor) { - if(this.remoteSuperVisorActor == null) { + if (this.remoteSuperVisorActor == null) { this.remoteSuperVisorActor = remoteSuperVisorActor; this.remoteSuperVisorActor.tell(new ServerActionJoin(getName()), getSelf()); }