From fd9024f6ea4ac64375295005ef3b630fb70c48e6 Mon Sep 17 00:00:00 2001 From: Steve Myers Date: Thu, 23 Oct 2014 22:11:11 -0700 Subject: [PATCH] updated seed peer mode to add all other seed peers with a different peerID --- src/main/java/io/bitsquare/BitSquare.java | 46 ++++++++++++------- .../java/io/bitsquare/gui/main/MainModel.java | 2 +- .../io/bitsquare/msg/actor/DHTManager.java | 4 +- .../util/BitsquareArgumentParser.java | 12 ++--- .../msg/dhttest/DHTTestController.java | 2 +- 5 files changed, 41 insertions(+), 25 deletions(-) diff --git a/src/main/java/io/bitsquare/BitSquare.java b/src/main/java/io/bitsquare/BitSquare.java index 2252938139..2a436b1258 100644 --- a/src/main/java/io/bitsquare/BitSquare.java +++ b/src/main/java/io/bitsquare/BitSquare.java @@ -23,12 +23,16 @@ import io.bitsquare.msg.actor.command.InitializePeer; import io.bitsquare.msg.actor.event.PeerInitialized; import io.bitsquare.util.BitsquareArgumentParser; +import java.net.UnknownHostException; + +import java.util.HashSet; +import java.util.Set; import java.util.concurrent.TimeoutException; import javafx.application.Application; -import net.tomp2p.connection.Ports; import net.tomp2p.peers.Number160; +import net.tomp2p.peers.PeerAddress; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -45,15 +49,15 @@ public class BitSquare { private static final Logger log = LoggerFactory.getLogger(BitSquare.class); private static String appName = "Bitsquare"; - private static int clientPort; + private static int port; private static String interfaceHint; public static String getAppName() { return appName; } - public static int getClientPort() { - return clientPort; + public static int getPort() { + return port; } public static void main(String[] args) { @@ -72,26 +76,39 @@ public class BitSquare { appName = appName + "-" + namespace.getString(BitsquareArgumentParser.NAME_FLAG); } + port = BitsquareArgumentParser.PORT_DEFAULT; + if (namespace.getString(BitsquareArgumentParser.PORT_FLAG) != null) { + port = Integer.valueOf(namespace.getString(BitsquareArgumentParser.PORT_FLAG)); + } + if (namespace.getString(BitsquareArgumentParser.INFHINT_FLAG) != null) { interfaceHint = namespace.getString(BitsquareArgumentParser.INFHINT_FLAG); } - if (namespace.getBoolean(BitsquareArgumentParser.SEED_FLAG) == true) { + if (namespace.getBoolean(BitsquareArgumentParser.BOOTSTRAP_FLAG) == true) { String seedID = SeedNodeAddress.StaticSeedNodeAddresses.DIGITAL_OCEAN1.getId(); - if (namespace.getString(BitsquareArgumentParser.SEED_ID_FLAG) != null) { - seedID = namespace.getString(BitsquareArgumentParser.SEED_ID_FLAG); - } - - Integer port = BitsquareArgumentParser.PORT_DEFAULT; - if (namespace.getString(BitsquareArgumentParser.PORT_FLAG) != null) { - port = Integer.valueOf(namespace.getString(BitsquareArgumentParser.PORT_FLAG)); + if (namespace.getString(BitsquareArgumentParser.PEER_ID_FLAG) != null) { + seedID = namespace.getString(BitsquareArgumentParser.PEER_ID_FLAG); } ActorSystem actorSystem = ActorSystem.create(getAppName()); + final Set peerAddresses = new HashSet(); + final String sid = seedID; + SeedNodeAddress.StaticSeedNodeAddresses.getAllSeedNodeAddresses().forEach(a -> { + if (!a.getId().equals(sid)) { + try { + peerAddresses.add(new PeerAddress(Number160.createHash(a.getId()),a.getIp(), + a.getPort(), a.getPort())); + } catch (UnknownHostException uhe) { + log.error("Unknown Host ["+a.getIp()+"]: "+uhe.getMessage()); + } + } + }); + ActorRef seedNode = actorSystem.actorOf(DHTManager.getProps(), DHTManager.SEED_NAME); Inbox inbox = Inbox.create(actorSystem); - inbox.send(seedNode, new InitializePeer(Number160.createHash(seedID), port, interfaceHint, null)); + inbox.send(seedNode, new InitializePeer(Number160.createHash(sid), port, interfaceHint, peerAddresses)); Thread seedNodeThread = new Thread(() -> { Boolean quit = false; @@ -122,9 +139,6 @@ public class BitSquare { seedNodeThread.start(); } else { - clientPort = new Ports().tcpPort(); // default we use a random port for the client - if (namespace.getString(BitsquareArgumentParser.PORT_FLAG) != null) - clientPort = Integer.valueOf(namespace.getString(BitsquareArgumentParser.PORT_FLAG)); Application.launch(BitSquareUI.class, args); } diff --git a/src/main/java/io/bitsquare/gui/main/MainModel.java b/src/main/java/io/bitsquare/gui/main/MainModel.java index 5cd874cbfc..4d2b935854 100644 --- a/src/main/java/io/bitsquare/gui/main/MainModel.java +++ b/src/main/java/io/bitsquare/gui/main/MainModel.java @@ -107,7 +107,7 @@ class MainModel extends UIModel { // For testing with the serverside seednode we need the BootstrappedPeerFactory which gets started form // messageFacade.init - messageFacade.init(BitSquare.getClientPort(), new BootstrapListener() { + messageFacade.init(BitSquare.getPort(), new BootstrapListener() { @Override public void onCompleted() { messageFacadeInited = true; diff --git a/src/main/java/io/bitsquare/msg/actor/DHTManager.java b/src/main/java/io/bitsquare/msg/actor/DHTManager.java index 11177bcfd7..df42d530c1 100644 --- a/src/main/java/io/bitsquare/msg/actor/DHTManager.java +++ b/src/main/java/io/bitsquare/msg/actor/DHTManager.java @@ -67,7 +67,9 @@ public class DHTManager extends AbstractActor { bindings.addInterface(ip.getInterfaceHint()); } peer = new PeerBuilder(ip.getPeerId()).ports(ip.getPort()).bindings(bindings).start(); - + if (ip.getBootstrapPeers() != null && ip.getBootstrapPeers().size() > 0) { + peer.bootstrap().bootstrapTo(ip.getBootstrapPeers()).start(); + } peerDHT = new PeerBuilderDHT(peer).start(); peerNAT = new PeerBuilderNAT(peer).start(); diff --git a/src/main/java/io/bitsquare/util/BitsquareArgumentParser.java b/src/main/java/io/bitsquare/util/BitsquareArgumentParser.java index 086eb8146c..b089d04222 100644 --- a/src/main/java/io/bitsquare/util/BitsquareArgumentParser.java +++ b/src/main/java/io/bitsquare/util/BitsquareArgumentParser.java @@ -27,8 +27,8 @@ import net.sourceforge.argparse4j.inf.Namespace; public class BitsquareArgumentParser { - public static String SEED_FLAG = "seed"; - public static String SEED_ID_FLAG = "seedid"; + public static String BOOTSTRAP_FLAG = "bootstrap"; + public static String PEER_ID_FLAG = "peerid"; public static String PORT_FLAG = "port"; public static Integer PORT_DEFAULT = 5000; public static String INFHINT_FLAG = "interface"; @@ -40,12 +40,12 @@ public class BitsquareArgumentParser { parser = ArgumentParsers.newArgumentParser("BitSquare") .defaultHelp(true) .description("BitSquare decentralized bitcoin exchange."); - parser.addArgument("-s", "--" + SEED_FLAG) + parser.addArgument("-b", "--" + BOOTSTRAP_FLAG) .action(Arguments.storeTrue()) - .help("Start as DHT seed node, no UI."); - parser.addArgument("-d", "--" + SEED_ID_FLAG) + .help("Start as DHT bootstrap peer, no UI."); + parser.addArgument("-d", "--" + PEER_ID_FLAG) .setDefault(SeedNodeAddress.StaticSeedNodeAddresses.DIGITAL_OCEAN1.getId()) - .help("Seed node peer ID."); + .help("Bootstrap peer ID."); parser.addArgument("-p", "--"+PORT_FLAG) .setDefault(PORT_DEFAULT) .help("IP port to listen on."); diff --git a/src/test/java/io/bitsquare/msg/dhttest/DHTTestController.java b/src/test/java/io/bitsquare/msg/dhttest/DHTTestController.java index 8c4db35cfa..94c3158f50 100644 --- a/src/test/java/io/bitsquare/msg/dhttest/DHTTestController.java +++ b/src/test/java/io/bitsquare/msg/dhttest/DHTTestController.java @@ -77,7 +77,7 @@ public class DHTTestController implements Initializable { @Override public void initialize(URL url, ResourceBundle rb) { - messageFacade.init(BitSquare.getClientPort(), new BootstrapListener() { + messageFacade.init(BitSquare.getPort(), new BootstrapListener() { @Override public void onCompleted() { onMessageFacadeInitialised();