Newer
Older
import java.util.HashMap;
import akka.actor.ActorRef;
import akka.actor.UntypedActor;
import java.io.Serializable;
public abstract class AbstractWallet extends UntypedActor implements Serializable {
// Used to join the network (a pre known participant/Wallet must be known)
public static class ActionJoin implements Serializable {}
// Returns some neighbors that might be used as known
// and/or local neighbors
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 {
public ActionInvalidate(String name) {
this.name = name;
}
}
// Used to send (positive amount) or retreive money (negative amount)
public static class ActionReceiveTransaction implements Serializable {
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 {
public ActionSearchWalletReference(String name) {
this.name = name;
}
}
// Used to return a Wallet reference (akka-style string which can
// be transformed to an ActorRef)
public static class ActionSearchWalletReferenceAnswer implements Serializable {
public ActionSearchWalletReferenceAnswer(String address) {
this.address = address;
}
}
// Used to search a Wallet by name, i.e. the own wallet if we just
// joined the network; If a receiving participant holds the stored Wallet,
// he returns it, otherwise, he might use gossiping methods to go on
// with the search;
// Note: You should also forward the sender (the participant who actually
// searches for this Wallet, so that it can be returnd the direct way)
public static class ActionSearchMyWallet implements Serializable {
public ActionSearchMyWallet(String name) {
this.name = name;
}
}
// Used to return a searched Wallet
public static class ActionSearchMyWalletAnswer implements Serializable {
public ActionSearchMyWalletAnswer(AbstractWallet w) {
this.w = w;
}
}
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
// 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;
}