From c4478ffd9d820b05821e1f61f89853048abc6a03 Mon Sep 17 00:00:00 2001 From: Simon Schmitt <rimesime@mi.fu-berlin.de> Date: Fri, 12 Jun 2015 15:34:14 +0200 Subject: [PATCH] adding common interface --- Interface/AbstractWallet.java | 109 ++++++++++++++++++++++++++++++++++ Interface/Wallet.java | 55 +++++++++++++++++ 2 files changed, 164 insertions(+) create mode 100644 Interface/AbstractWallet.java create mode 100644 Interface/Wallet.java diff --git a/Interface/AbstractWallet.java b/Interface/AbstractWallet.java new file mode 100644 index 0000000..1cc3a43 --- /dev/null +++ b/Interface/AbstractWallet.java @@ -0,0 +1,109 @@ +import java.util.HashMap; +import akka.actor.ActorRef; +import akka.actor.UntypedActor; +import java.io.Serializable; + +public abstract class AbstractWallet extends UntypedActor implements Serializable { + + // Returns some neighbors that might be used as local + // and/or local neighborsUntypedActor + public static class ActionJoin implements Serializable {} + public class ActionJoinAnswer implements Serializable { + public final HashMap<String, ActorRef> someNeighbors = new HashMap<>(); + } + + // Used to push the state of my/a wallet to another participant + public static class ActionStoreOrUpdate implements Serializable { + public final AbstractWallet w; + public ActionStoreOrUpdate(AbstractWallet w) { + this.w = w; + } + } + + // May be used to delete a stored Wallet on another participant + public static class ActionInvalidate implements Serializable { + final String name; + public ActionInvalidate(String name) { + this.name = name; + } + } + + // Used to send (positive amount) or retreive money (negative amount) + public static class ActionReceiveTransaction implements Serializable { + final public int amount; + public ActionReceiveTransaction(int amount) { + this.amount = amount; + } + } + + // Used to search a Wallet by name, i.e. when we want to + // perform a transaction on it + public static class ActionSearchWalletReference implements Serializable { + final String name; + public ActionSearchWalletReference(String name) { + this.name = name; + } + } + + // Used to return a Wallet + public static class ActionSearchWalletReferenceAnswer implements Serializable { + final AbstractWallet w; + public ActionSearchWalletReferenceAnswer(AbstractWallet w) { + this.w = w; + } + } + + // Used to search a Wallet by name, i.e. the own wallet if we just + // joined the network + public static class ActionSearchMyWallet implements Serializable { + final String name; + public ActionSearchMyWallet(String name) { + this.name = name; + } + } + + // Constructor + public AbstractWallet(String name) { + this.name = name; + } + + // Returns the name of this wallet, e.g. "Lieschen Müller" + public String getName() { + return this.name; + } + + // Returns the akka-style address as String, which + // could be converted to an ActorRef object later + public abstract String getAddress(); + + // Performs housekeeping operations, e.g. pushes + // backedUpNeighbor-entries to other neighbors + public abstract void leave(); + + // The which receives Action objects + public abstract void onReceive(Object message); + + // Holds references to neighbors that were in + // contact with this wallet during runtime; + // The key corresponds to the Wallet's name + public transient HashMap<String, ActorRef> knownNeighbors; + + // Holds references to neighbors this wallet + // synchronizes itself to (the Wallet object); + // The key corresponds to the Wallet's name + public transient HashMap<String, ActorRef> localNeighbors; + + // Holds all Wallets from network participants + // which synchronize their state (Wallet object) + // with us; + // The key corresponds to the Wallet's name + public transient HashMap<String, AbstractWallet> backedUpNeighbors; + + // The name of this wallet (does never change, no + // duplicates in network assumed) + public final String name; + + // The amount this wallet currently holds + public int amount; + +} \ No newline at end of file diff --git a/Interface/Wallet.java b/Interface/Wallet.java new file mode 100644 index 0000000..c3e9a35 --- /dev/null +++ b/Interface/Wallet.java @@ -0,0 +1,55 @@ +import akka.actor.ActorRef; +import akka.actor.UntypedActor; +import akka.actor.ActorSystem; +import akka.actor.Props; +import akka.actor.Inbox; + +import java.io.Serializable; + +public class Wallet extends AbstractWallet { + + public static void main(String[] args) { + // Create the 'helloakka' actor system + final ActorSystem system = ActorSystem.create("FuCoin"); + + // Create the 'greeter' actor + final ActorRef greeter = system.actorOf(Props.create(Wallet.class), "wallet"); + + // Create the "actor-in-a-box" + final Inbox inbox = Inbox.create(system); + } + + public Wallet(String name) + { + super(name); + } + + public void onReceive(Object message) { + // TODO implement + + /* + if (message instanceof ActionReceiveTransaction) + { + System.out.println("hello, " + ((ActionReceiveTransaction) message).amount; + } + else if (message instanceof ActionReceiveTransaction) { + // Send the current greeting back to the sender + getSender().tell(new ActionReceiveTransaction(0.01), getSelf()); + } + else { + unhandled(message); + } + */ + + } + + public String getAddress() { + // TODO implement + return ""; + } + + public void leave() { + // TODO implement + } + +} \ No newline at end of file -- GitLab