mirror of
https://github.com/haveno-dex/haveno.git
synced 2025-12-16 16:24:29 -05:00
Change polling from 1 sec to 3 sec, refactorings
This commit is contained in:
parent
4fb8030a43
commit
df3a507066
5 changed files with 45 additions and 40 deletions
|
|
@ -17,6 +17,8 @@
|
||||||
|
|
||||||
package io.bitsquare.app;
|
package io.bitsquare.app;
|
||||||
|
|
||||||
|
import io.bitsquare.network.BootstrapNode;
|
||||||
|
|
||||||
import net.sourceforge.argparse4j.ArgumentParsers;
|
import net.sourceforge.argparse4j.ArgumentParsers;
|
||||||
import net.sourceforge.argparse4j.inf.ArgumentParserException;
|
import net.sourceforge.argparse4j.inf.ArgumentParserException;
|
||||||
import net.sourceforge.argparse4j.inf.Namespace;
|
import net.sourceforge.argparse4j.inf.Namespace;
|
||||||
|
|
@ -24,7 +26,7 @@ import net.sourceforge.argparse4j.inf.Namespace;
|
||||||
/*
|
/*
|
||||||
optional arguments:
|
optional arguments:
|
||||||
-h, --help show this help message and exit
|
-h, --help show this help message and exit
|
||||||
-d PEERID, --peerid PEERID Seed peer ID. (default: digitalocean1.bitsquare.io)
|
-d PEER_ID, --peerid PEER Seed peer ID (default: "digitalocean1.bitsquare.io")
|
||||||
-p PORT, --port PORT IP port to listen on. (default: 5000)
|
-p PORT, --port PORT IP port to listen on. (default: 5000)
|
||||||
-i INTERFACE, --interface INTERFACE Network interface to listen on.
|
-i INTERFACE, --interface INTERFACE Network interface to listen on.
|
||||||
-n NAME, --name NAME Append name to application name.
|
-n NAME, --name NAME Append name to application name.
|
||||||
|
|
@ -33,10 +35,12 @@ public class ArgumentParser {
|
||||||
|
|
||||||
public static String PEER_ID_FLAG = "peerid";
|
public static String PEER_ID_FLAG = "peerid";
|
||||||
public static String PORT_FLAG = "port";
|
public static String PORT_FLAG = "port";
|
||||||
public static Integer PORT_DEFAULT = 5000;
|
public static String INTERFACE_HINT_FLAG = "interface";
|
||||||
public static String INFHINT_FLAG = "interface";
|
|
||||||
public static String NAME_FLAG = "name";
|
public static String NAME_FLAG = "name";
|
||||||
|
|
||||||
|
public static Integer PORT_DEFAULT = 5000;
|
||||||
|
public static String PEER_ID_DEFAULT = BootstrapNode.DIGITAL_OCEAN1.getId();
|
||||||
|
|
||||||
private final net.sourceforge.argparse4j.inf.ArgumentParser parser;
|
private final net.sourceforge.argparse4j.inf.ArgumentParser parser;
|
||||||
|
|
||||||
public ArgumentParser() {
|
public ArgumentParser() {
|
||||||
|
|
@ -44,11 +48,12 @@ public class ArgumentParser {
|
||||||
.defaultHelp(true)
|
.defaultHelp(true)
|
||||||
.description("Bitsquare - The decentralized bitcoin exchange.");
|
.description("Bitsquare - The decentralized bitcoin exchange.");
|
||||||
parser.addArgument("-d", "--" + PEER_ID_FLAG)
|
parser.addArgument("-d", "--" + PEER_ID_FLAG)
|
||||||
|
.setDefault(PEER_ID_DEFAULT)
|
||||||
.help("Seed peer ID.");
|
.help("Seed peer ID.");
|
||||||
parser.addArgument("-p", "--" + PORT_FLAG)
|
parser.addArgument("-p", "--" + PORT_FLAG)
|
||||||
.setDefault(PORT_DEFAULT)
|
.setDefault(PORT_DEFAULT)
|
||||||
.help("IP port to listen on.");
|
.help("IP port to listen on.");
|
||||||
parser.addArgument("-i", "--" + INFHINT_FLAG)
|
parser.addArgument("-i", "--" + INTERFACE_HINT_FLAG)
|
||||||
.help("Network interface to listen on.");
|
.help("Network interface to listen on.");
|
||||||
parser.addArgument("-n", "--" + NAME_FLAG)
|
parser.addArgument("-n", "--" + NAME_FLAG)
|
||||||
.help("Append name to application name.");
|
.help("Append name to application name.");
|
||||||
|
|
|
||||||
|
|
@ -52,16 +52,11 @@ public class SeedNode {
|
||||||
ArgumentParser parser = new ArgumentParser();
|
ArgumentParser parser = new ArgumentParser();
|
||||||
Namespace namespace = parser.parseArgs(args);
|
Namespace namespace = parser.parseArgs(args);
|
||||||
|
|
||||||
if (namespace.getString(ArgumentParser.INFHINT_FLAG) != null) {
|
if (namespace.getString(ArgumentParser.INTERFACE_HINT_FLAG) != null)
|
||||||
interfaceHint = namespace.getString(ArgumentParser.INFHINT_FLAG);
|
interfaceHint = namespace.getString(ArgumentParser.INTERFACE_HINT_FLAG);
|
||||||
}
|
|
||||||
|
|
||||||
int serverPort = Integer.valueOf(namespace.getString(ArgumentParser.PORT_FLAG));
|
int serverPort = Integer.valueOf(namespace.getString(ArgumentParser.PORT_FLAG));
|
||||||
|
String seedID = namespace.getString(ArgumentParser.PEER_ID_FLAG);
|
||||||
String seedID = BootstrapNode.LOCAL_HOST.getId();
|
|
||||||
if (namespace.getString(ArgumentParser.PEER_ID_FLAG) != null) {
|
|
||||||
seedID = namespace.getString(ArgumentParser.PEER_ID_FLAG);
|
|
||||||
}
|
|
||||||
|
|
||||||
final Set<PeerAddress> peerAddresses = new HashSet<>();
|
final Set<PeerAddress> peerAddresses = new HashSet<>();
|
||||||
for (Node node : BootstrapNode.values()) {
|
for (Node node : BootstrapNode.values()) {
|
||||||
|
|
@ -81,14 +76,15 @@ public class SeedNode {
|
||||||
inbox.send(seedNode, new InitializePeer(Number160.createHash(seedID), serverPort, interfaceHint,
|
inbox.send(seedNode, new InitializePeer(Number160.createHash(seedID), serverPort, interfaceHint,
|
||||||
peerAddresses));
|
peerAddresses));
|
||||||
|
|
||||||
|
final String _seedID = seedID;
|
||||||
Thread seedNodeThread = new Thread(() -> {
|
Thread seedNodeThread = new Thread(() -> {
|
||||||
Boolean quit = false;
|
Boolean quit = false;
|
||||||
while (!quit) {
|
while (!quit) {
|
||||||
try {
|
try {
|
||||||
Object m = inbox.receive(FiniteDuration.create(5L, "seconds"));
|
Object m = inbox.receive(FiniteDuration.create(5L, "seconds"));
|
||||||
if (m instanceof PeerInitialized) {
|
if (m instanceof PeerInitialized) {
|
||||||
log.debug("Seed Peer Initialized on port " + ((PeerInitialized) m).getPort
|
log.debug("Seed Peer with ID " + _seedID +
|
||||||
());
|
" initialized on port " + ((PeerInitialized) m).getPort());
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
if (!(e instanceof TimeoutException)) {
|
if (!(e instanceof TimeoutException)) {
|
||||||
|
|
|
||||||
|
|
@ -173,7 +173,7 @@ public class OfferBook {
|
||||||
private void startPolling() {
|
private void startPolling() {
|
||||||
addListeners();
|
addListeners();
|
||||||
setBankAccount(user.getCurrentBankAccount());
|
setBankAccount(user.getCurrentBankAccount());
|
||||||
pollingTimer = Utilities.setInterval(1000, (animationTimer) -> {
|
pollingTimer = Utilities.setInterval(3000, (animationTimer) -> {
|
||||||
messageFacade.requestInvalidationTimeStampFromDHT(fiatCode);
|
messageFacade.requestInvalidationTimeStampFromDHT(fiatCode);
|
||||||
return null;
|
return null;
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -77,6 +77,8 @@ public class BootstrappedPeerFactory {
|
||||||
|
|
||||||
private final SettableFuture<PeerDHT> settableFuture = SettableFuture.create();
|
private final SettableFuture<PeerDHT> settableFuture = SettableFuture.create();
|
||||||
public final StringProperty connectionState = new SimpleStringProperty();
|
public final StringProperty connectionState = new SimpleStringProperty();
|
||||||
|
private Peer peer;
|
||||||
|
private PeerDHT peerDHT;
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
@ -109,8 +111,8 @@ public class BootstrappedPeerFactory {
|
||||||
|
|
||||||
public ListenableFuture<PeerDHT> start(int port) {
|
public ListenableFuture<PeerDHT> start(int port) {
|
||||||
try {
|
try {
|
||||||
Peer peer = new PeerBuilder(keyPair).ports(port).behindFirewall().start();
|
peer = new PeerBuilder(keyPair).ports(port).start();
|
||||||
PeerDHT peerDHT = new PeerBuilderDHT(peer).storageLayer(new StorageLayer(storage)).start();
|
peerDHT = new PeerBuilderDHT(peer).storageLayer(new StorageLayer(storage)).start();
|
||||||
|
|
||||||
peer.peerBean().peerMap().addPeerMapChangeListener(new PeerMapChangeListener() {
|
peer.peerBean().peerMap().addPeerMapChangeListener(new PeerMapChangeListener() {
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -154,18 +156,14 @@ public class BootstrappedPeerFactory {
|
||||||
|
|
||||||
switch (lastSuccessfulBootstrap) {
|
switch (lastSuccessfulBootstrap) {
|
||||||
case "relay":
|
case "relay":
|
||||||
futureDiscover = peerDHT.peer().discover().peerAddress(getBootstrapAddress()).start();
|
bootstrapWithRelay();
|
||||||
PeerNAT peerNAT = new PeerBuilderNAT(peerDHT.peer()).start();
|
|
||||||
FutureNAT futureNAT = peerNAT.startSetupPortforwarding(futureDiscover);
|
|
||||||
bootstrapWithRelay(peerDHT, peerNAT, futureDiscover, futureNAT);
|
|
||||||
break;
|
break;
|
||||||
case "portForwarding":
|
case "portForwarding":
|
||||||
futureDiscover = peerDHT.peer().discover().peerAddress(getBootstrapAddress()).start();
|
tryPortForwarding();
|
||||||
tryPortForwarding(peerDHT, futureDiscover);
|
|
||||||
break;
|
break;
|
||||||
case "default":
|
case "default":
|
||||||
default:
|
default:
|
||||||
discover(peerDHT);
|
discover();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
|
@ -177,13 +175,13 @@ public class BootstrappedPeerFactory {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 1. Attempt: Try to discover our outside visible address
|
// 1. Attempt: Try to discover our outside visible address
|
||||||
private void discover(PeerDHT peerDHT) {
|
private void discover() {
|
||||||
FutureDiscover futureDiscover = peerDHT.peer().discover().peerAddress(getBootstrapAddress()).start();
|
FutureDiscover futureDiscover = peer.discover().peerAddress(getBootstrapAddress()).start();
|
||||||
futureDiscover.addListener(new BaseFutureListener<BaseFuture>() {
|
futureDiscover.addListener(new BaseFutureListener<BaseFuture>() {
|
||||||
@Override
|
@Override
|
||||||
public void operationComplete(BaseFuture future) throws Exception {
|
public void operationComplete(BaseFuture future) throws Exception {
|
||||||
if (future.isSuccess()) {
|
if (future.isSuccess()) {
|
||||||
setState("We are visible to other peers: My address visible to " +
|
setState("We are directly connected and visible to other peers: My address visible to " +
|
||||||
"the outside is " + futureDiscover.peerAddress());
|
"the outside is " + futureDiscover.peerAddress());
|
||||||
persistence.write(BootstrappedPeerFactory.this, "lastSuccessfulBootstrap", "default");
|
persistence.write(BootstrappedPeerFactory.this, "lastSuccessfulBootstrap", "default");
|
||||||
settableFuture.set(peerDHT);
|
settableFuture.set(peerDHT);
|
||||||
|
|
@ -192,7 +190,7 @@ public class BootstrappedPeerFactory {
|
||||||
setState("We are probably behind a NAT and not reachable to other peers. " +
|
setState("We are probably behind a NAT and not reachable to other peers. " +
|
||||||
"We try port forwarding as next step.");
|
"We try port forwarding as next step.");
|
||||||
|
|
||||||
tryPortForwarding(peerDHT, futureDiscover);
|
tryPortForwarding();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -206,20 +204,22 @@ public class BootstrappedPeerFactory {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. Attempt: Try to set up port forwarding with UPNP and NAT-PMP
|
// 2. Attempt: Try to set up port forwarding with UPNP and NAT-PMP
|
||||||
private void tryPortForwarding(PeerDHT peerDHT, FutureDiscover futureDiscover) {
|
private void tryPortForwarding() {
|
||||||
PeerNAT peerNAT = new PeerBuilderNAT(peerDHT.peer()).start();
|
FutureDiscover futureDiscover = peer.discover().peerAddress(getBootstrapAddress()).start();
|
||||||
|
PeerNAT peerNAT = new PeerBuilderNAT(peer).start();
|
||||||
FutureNAT futureNAT = peerNAT.startSetupPortforwarding(futureDiscover);
|
FutureNAT futureNAT = peerNAT.startSetupPortforwarding(futureDiscover);
|
||||||
futureNAT.addListener(new BaseFutureListener<BaseFuture>() {
|
futureNAT.addListener(new BaseFutureListener<BaseFuture>() {
|
||||||
@Override
|
@Override
|
||||||
public void operationComplete(BaseFuture future) throws Exception {
|
public void operationComplete(BaseFuture future) throws Exception {
|
||||||
if (future.isSuccess()) {
|
if (future.isSuccess()) {
|
||||||
setState("Automatic port forwarding is setup. Address = " + futureNAT.peerAddress());
|
setState("Automatic port forwarding is setup. We need to run a discover again. Address = " +
|
||||||
|
futureNAT.peerAddress());
|
||||||
// we need a second discover process
|
// we need a second discover process
|
||||||
discoverAfterPortForwarding(peerDHT);
|
discoverAfterPortForwarding();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
setState("Port forwarding has failed. We try to use a relay as next step.");
|
setState("Port forwarding has failed. We try to use a relay as next step.");
|
||||||
bootstrapWithRelay(peerDHT, peerNAT, futureDiscover, futureNAT);
|
bootstrapWithRelay();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -233,8 +233,8 @@ public class BootstrappedPeerFactory {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Try to determine our outside visible address after port forwarding is setup
|
// Try to determine our outside visible address after port forwarding is setup
|
||||||
private void discoverAfterPortForwarding(PeerDHT peerDHT) {
|
private void discoverAfterPortForwarding() {
|
||||||
FutureDiscover futureDiscover = peerDHT.peer().discover().peerAddress(getBootstrapAddress()).start();
|
FutureDiscover futureDiscover = peer.discover().peerAddress(getBootstrapAddress()).start();
|
||||||
futureDiscover.addListener(new BaseFutureListener<BaseFuture>() {
|
futureDiscover.addListener(new BaseFutureListener<BaseFuture>() {
|
||||||
@Override
|
@Override
|
||||||
public void operationComplete(BaseFuture future) throws Exception {
|
public void operationComplete(BaseFuture future) throws Exception {
|
||||||
|
|
@ -265,8 +265,10 @@ public class BootstrappedPeerFactory {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. Attempt: We try to use another peer as relay
|
// 3. Attempt: We try to use another peer as relay
|
||||||
private void bootstrapWithRelay(PeerDHT peerDHT, PeerNAT peerNAT, FutureDiscover futureDiscover,
|
private void bootstrapWithRelay() {
|
||||||
FutureNAT futureNAT) {
|
FutureDiscover futureDiscover = peer.discover().peerAddress(getBootstrapAddress()).start();
|
||||||
|
PeerNAT peerNAT = new PeerBuilderNAT(peer).start();
|
||||||
|
FutureNAT futureNAT = peerNAT.startSetupPortforwarding(futureDiscover);
|
||||||
FutureRelayNAT futureRelayNAT = peerNAT.startRelay(futureDiscover, futureNAT);
|
FutureRelayNAT futureRelayNAT = peerNAT.startRelay(futureDiscover, futureNAT);
|
||||||
futureRelayNAT.addListener(new BaseFutureListener<BaseFuture>() {
|
futureRelayNAT.addListener(new BaseFutureListener<BaseFuture>() {
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -79,6 +79,10 @@ public class DHTManager extends AbstractActor {
|
||||||
|
|
||||||
peer = new PeerBuilder(initializePeer.getPeerId()).ports(initializePeer.getPort()).bindings(bindings)
|
peer = new PeerBuilder(initializePeer.getPeerId()).ports(initializePeer.getPort()).bindings(bindings)
|
||||||
.start();
|
.start();
|
||||||
|
peer.objectDataReply((sender, request) -> {
|
||||||
|
log.debug("received request: ", request.toString());
|
||||||
|
return "pong";
|
||||||
|
});
|
||||||
|
|
||||||
// For the moment we want not to bootstrap to other seed nodes to keep test scenarios
|
// For the moment we want not to bootstrap to other seed nodes to keep test scenarios
|
||||||
// simple
|
// simple
|
||||||
|
|
@ -110,9 +114,7 @@ public class DHTManager extends AbstractActor {
|
||||||
|
|
||||||
sender().tell(new PeerInitialized(peer.peerID(), initializePeer.getPort()), self());
|
sender().tell(new PeerInitialized(peer.peerID(), initializePeer.getPort()), self());
|
||||||
} catch (Throwable t) {
|
} catch (Throwable t) {
|
||||||
log.info("The second instance has been started. If that happens at the first instance" +
|
log.error(t.getMessage());
|
||||||
" we are in trouble... " + t.getMessage());
|
|
||||||
sender().tell(new PeerInitialized(null, null), self());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue