mirror of
https://github.com/haveno-dex/haveno.git
synced 2025-04-19 23:36:00 -04:00
Change polling from 1 sec to 3 sec, refactorings
This commit is contained in:
parent
4fb8030a43
commit
df3a507066
@ -17,6 +17,8 @@
|
||||
|
||||
package io.bitsquare.app;
|
||||
|
||||
import io.bitsquare.network.BootstrapNode;
|
||||
|
||||
import net.sourceforge.argparse4j.ArgumentParsers;
|
||||
import net.sourceforge.argparse4j.inf.ArgumentParserException;
|
||||
import net.sourceforge.argparse4j.inf.Namespace;
|
||||
@ -24,7 +26,7 @@ import net.sourceforge.argparse4j.inf.Namespace;
|
||||
/*
|
||||
optional arguments:
|
||||
-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)
|
||||
-i INTERFACE, --interface INTERFACE Network interface to listen on.
|
||||
-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 PORT_FLAG = "port";
|
||||
public static Integer PORT_DEFAULT = 5000;
|
||||
public static String INFHINT_FLAG = "interface";
|
||||
public static String INTERFACE_HINT_FLAG = "interface";
|
||||
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;
|
||||
|
||||
public ArgumentParser() {
|
||||
@ -44,11 +48,12 @@ public class ArgumentParser {
|
||||
.defaultHelp(true)
|
||||
.description("Bitsquare - The decentralized bitcoin exchange.");
|
||||
parser.addArgument("-d", "--" + PEER_ID_FLAG)
|
||||
.setDefault(PEER_ID_DEFAULT)
|
||||
.help("Seed peer ID.");
|
||||
parser.addArgument("-p", "--" + PORT_FLAG)
|
||||
.setDefault(PORT_DEFAULT)
|
||||
.help("IP port to listen on.");
|
||||
parser.addArgument("-i", "--" + INFHINT_FLAG)
|
||||
parser.addArgument("-i", "--" + INTERFACE_HINT_FLAG)
|
||||
.help("Network interface to listen on.");
|
||||
parser.addArgument("-n", "--" + NAME_FLAG)
|
||||
.help("Append name to application name.");
|
||||
|
@ -52,16 +52,11 @@ public class SeedNode {
|
||||
ArgumentParser parser = new ArgumentParser();
|
||||
Namespace namespace = parser.parseArgs(args);
|
||||
|
||||
if (namespace.getString(ArgumentParser.INFHINT_FLAG) != null) {
|
||||
interfaceHint = namespace.getString(ArgumentParser.INFHINT_FLAG);
|
||||
}
|
||||
if (namespace.getString(ArgumentParser.INTERFACE_HINT_FLAG) != null)
|
||||
interfaceHint = namespace.getString(ArgumentParser.INTERFACE_HINT_FLAG);
|
||||
|
||||
int serverPort = Integer.valueOf(namespace.getString(ArgumentParser.PORT_FLAG));
|
||||
|
||||
String seedID = BootstrapNode.LOCAL_HOST.getId();
|
||||
if (namespace.getString(ArgumentParser.PEER_ID_FLAG) != null) {
|
||||
seedID = namespace.getString(ArgumentParser.PEER_ID_FLAG);
|
||||
}
|
||||
String seedID = namespace.getString(ArgumentParser.PEER_ID_FLAG);
|
||||
|
||||
final Set<PeerAddress> peerAddresses = new HashSet<>();
|
||||
for (Node node : BootstrapNode.values()) {
|
||||
@ -81,14 +76,15 @@ public class SeedNode {
|
||||
inbox.send(seedNode, new InitializePeer(Number160.createHash(seedID), serverPort, interfaceHint,
|
||||
peerAddresses));
|
||||
|
||||
final String _seedID = seedID;
|
||||
Thread seedNodeThread = new Thread(() -> {
|
||||
Boolean quit = false;
|
||||
while (!quit) {
|
||||
try {
|
||||
Object m = inbox.receive(FiniteDuration.create(5L, "seconds"));
|
||||
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) {
|
||||
if (!(e instanceof TimeoutException)) {
|
||||
|
@ -173,7 +173,7 @@ public class OfferBook {
|
||||
private void startPolling() {
|
||||
addListeners();
|
||||
setBankAccount(user.getCurrentBankAccount());
|
||||
pollingTimer = Utilities.setInterval(1000, (animationTimer) -> {
|
||||
pollingTimer = Utilities.setInterval(3000, (animationTimer) -> {
|
||||
messageFacade.requestInvalidationTimeStampFromDHT(fiatCode);
|
||||
return null;
|
||||
});
|
||||
|
@ -77,6 +77,8 @@ public class BootstrappedPeerFactory {
|
||||
|
||||
private final SettableFuture<PeerDHT> settableFuture = SettableFuture.create();
|
||||
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) {
|
||||
try {
|
||||
Peer peer = new PeerBuilder(keyPair).ports(port).behindFirewall().start();
|
||||
PeerDHT peerDHT = new PeerBuilderDHT(peer).storageLayer(new StorageLayer(storage)).start();
|
||||
peer = new PeerBuilder(keyPair).ports(port).start();
|
||||
peerDHT = new PeerBuilderDHT(peer).storageLayer(new StorageLayer(storage)).start();
|
||||
|
||||
peer.peerBean().peerMap().addPeerMapChangeListener(new PeerMapChangeListener() {
|
||||
@Override
|
||||
@ -154,18 +156,14 @@ public class BootstrappedPeerFactory {
|
||||
|
||||
switch (lastSuccessfulBootstrap) {
|
||||
case "relay":
|
||||
futureDiscover = peerDHT.peer().discover().peerAddress(getBootstrapAddress()).start();
|
||||
PeerNAT peerNAT = new PeerBuilderNAT(peerDHT.peer()).start();
|
||||
FutureNAT futureNAT = peerNAT.startSetupPortforwarding(futureDiscover);
|
||||
bootstrapWithRelay(peerDHT, peerNAT, futureDiscover, futureNAT);
|
||||
bootstrapWithRelay();
|
||||
break;
|
||||
case "portForwarding":
|
||||
futureDiscover = peerDHT.peer().discover().peerAddress(getBootstrapAddress()).start();
|
||||
tryPortForwarding(peerDHT, futureDiscover);
|
||||
tryPortForwarding();
|
||||
break;
|
||||
case "default":
|
||||
default:
|
||||
discover(peerDHT);
|
||||
discover();
|
||||
break;
|
||||
}
|
||||
} catch (IOException e) {
|
||||
@ -177,13 +175,13 @@ public class BootstrappedPeerFactory {
|
||||
}
|
||||
|
||||
// 1. Attempt: Try to discover our outside visible address
|
||||
private void discover(PeerDHT peerDHT) {
|
||||
FutureDiscover futureDiscover = peerDHT.peer().discover().peerAddress(getBootstrapAddress()).start();
|
||||
private void discover() {
|
||||
FutureDiscover futureDiscover = peer.discover().peerAddress(getBootstrapAddress()).start();
|
||||
futureDiscover.addListener(new BaseFutureListener<BaseFuture>() {
|
||||
@Override
|
||||
public void operationComplete(BaseFuture future) throws Exception {
|
||||
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());
|
||||
persistence.write(BootstrappedPeerFactory.this, "lastSuccessfulBootstrap", "default");
|
||||
settableFuture.set(peerDHT);
|
||||
@ -192,7 +190,7 @@ public class BootstrappedPeerFactory {
|
||||
setState("We are probably behind a NAT and not reachable to other peers. " +
|
||||
"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
|
||||
private void tryPortForwarding(PeerDHT peerDHT, FutureDiscover futureDiscover) {
|
||||
PeerNAT peerNAT = new PeerBuilderNAT(peerDHT.peer()).start();
|
||||
private void tryPortForwarding() {
|
||||
FutureDiscover futureDiscover = peer.discover().peerAddress(getBootstrapAddress()).start();
|
||||
PeerNAT peerNAT = new PeerBuilderNAT(peer).start();
|
||||
FutureNAT futureNAT = peerNAT.startSetupPortforwarding(futureDiscover);
|
||||
futureNAT.addListener(new BaseFutureListener<BaseFuture>() {
|
||||
@Override
|
||||
public void operationComplete(BaseFuture future) throws Exception {
|
||||
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
|
||||
discoverAfterPortForwarding(peerDHT);
|
||||
discoverAfterPortForwarding();
|
||||
}
|
||||
else {
|
||||
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
|
||||
private void discoverAfterPortForwarding(PeerDHT peerDHT) {
|
||||
FutureDiscover futureDiscover = peerDHT.peer().discover().peerAddress(getBootstrapAddress()).start();
|
||||
private void discoverAfterPortForwarding() {
|
||||
FutureDiscover futureDiscover = peer.discover().peerAddress(getBootstrapAddress()).start();
|
||||
futureDiscover.addListener(new BaseFutureListener<BaseFuture>() {
|
||||
@Override
|
||||
public void operationComplete(BaseFuture future) throws Exception {
|
||||
@ -265,8 +265,10 @@ public class BootstrappedPeerFactory {
|
||||
}
|
||||
|
||||
// 3. Attempt: We try to use another peer as relay
|
||||
private void bootstrapWithRelay(PeerDHT peerDHT, PeerNAT peerNAT, FutureDiscover futureDiscover,
|
||||
FutureNAT futureNAT) {
|
||||
private void bootstrapWithRelay() {
|
||||
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.addListener(new BaseFutureListener<BaseFuture>() {
|
||||
@Override
|
||||
|
@ -79,6 +79,10 @@ public class DHTManager extends AbstractActor {
|
||||
|
||||
peer = new PeerBuilder(initializePeer.getPeerId()).ports(initializePeer.getPort()).bindings(bindings)
|
||||
.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
|
||||
// simple
|
||||
@ -110,9 +114,7 @@ public class DHTManager extends AbstractActor {
|
||||
|
||||
sender().tell(new PeerInitialized(peer.peerID(), initializePeer.getPort()), self());
|
||||
} catch (Throwable t) {
|
||||
log.info("The second instance has been started. If that happens at the first instance" +
|
||||
" we are in trouble... " + t.getMessage());
|
||||
sender().tell(new PeerInitialized(null, null), self());
|
||||
log.error(t.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user