mirror of
https://github.com/haveno-dex/haveno.git
synced 2025-07-24 07:30:54 -04:00
Add error display for lost connections
This commit is contained in:
parent
24d29eaa83
commit
0344235a23
9 changed files with 434 additions and 323 deletions
|
@ -25,11 +25,17 @@ import io.bitsquare.crypto.CryptoService;
|
|||
import org.bitcoinj.core.AbstractWalletEventListener;
|
||||
import org.bitcoinj.core.Address;
|
||||
import org.bitcoinj.core.AddressFormatException;
|
||||
import org.bitcoinj.core.Block;
|
||||
import org.bitcoinj.core.Coin;
|
||||
import org.bitcoinj.core.DownloadProgressTracker;
|
||||
import org.bitcoinj.core.FilteredBlock;
|
||||
import org.bitcoinj.core.GetDataMessage;
|
||||
import org.bitcoinj.core.InsufficientMoneyException;
|
||||
import org.bitcoinj.core.Message;
|
||||
import org.bitcoinj.core.NetworkParameters;
|
||||
import org.bitcoinj.core.Peer;
|
||||
import org.bitcoinj.core.PeerAddress;
|
||||
import org.bitcoinj.core.PeerEventListener;
|
||||
import org.bitcoinj.core.Transaction;
|
||||
import org.bitcoinj.core.TransactionConfidence;
|
||||
import org.bitcoinj.core.TransactionInput;
|
||||
|
@ -63,12 +69,17 @@ import java.util.concurrent.Executor;
|
|||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
|
||||
import javafx.beans.property.DoubleProperty;
|
||||
import javafx.beans.property.IntegerProperty;
|
||||
import javafx.beans.property.ReadOnlyDoubleProperty;
|
||||
import javafx.beans.property.ReadOnlyIntegerProperty;
|
||||
import javafx.beans.property.SimpleDoubleProperty;
|
||||
import javafx.beans.property.SimpleIntegerProperty;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
|
@ -107,6 +118,7 @@ public class WalletService {
|
|||
private Wallet wallet;
|
||||
private AddressEntry registrationAddressEntry;
|
||||
private AddressEntry arbitratorDepositAddressEntry;
|
||||
private final IntegerProperty numPeers = new SimpleIntegerProperty(0);
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -184,12 +196,9 @@ public class WalletService {
|
|||
e.printStackTrace();
|
||||
log.error(e.toString());
|
||||
}
|
||||
// As an example!
|
||||
// walletAppKit.useTor();
|
||||
}
|
||||
else if (params == TestNet3Params.get()) {
|
||||
walletAppKit.setCheckpoints(getClass().getResourceAsStream("/wallet/checkpoints.testnet"));
|
||||
//walletAppKit.useTor();
|
||||
}
|
||||
|
||||
walletAppKit.setDownloadListener(downloadListener)
|
||||
|
@ -210,7 +219,6 @@ public class WalletService {
|
|||
}
|
||||
}, Threading.USER_THREAD);
|
||||
walletAppKit.startAsync();
|
||||
|
||||
return status.timeout(30, TimeUnit.SECONDS);
|
||||
}
|
||||
|
||||
|
@ -220,6 +228,47 @@ public class WalletService {
|
|||
|
||||
addressEntryList.onWalletReady(wallet);
|
||||
registrationAddressEntry = addressEntryList.getRegistrationAddressEntry();
|
||||
|
||||
walletAppKit.peerGroup().addEventListener(new PeerEventListener() {
|
||||
@Override
|
||||
public void onPeersDiscovered(Set<PeerAddress> peerAddresses) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBlocksDownloaded(Peer peer, Block block, FilteredBlock filteredBlock, int blocksLeft) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChainDownloadStarted(Peer peer, int blocksLeft) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPeerConnected(Peer peer, int peerCount) {
|
||||
log.trace("onPeerConnected " + peerCount);
|
||||
Threading.USER_THREAD.execute(() -> numPeers.set(peerCount));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPeerDisconnected(Peer peer, int peerCount) {
|
||||
log.trace("onPeerDisconnected " + peerCount);
|
||||
Threading.USER_THREAD.execute(() -> numPeers.set(peerCount));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Message onPreMessageReceived(Peer peer, Message m) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTransaction(Peer peer, Transaction t) {
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public List<Message> getData(Peer peer, GetDataMessage m) {
|
||||
return null;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void shutDown() {
|
||||
|
@ -534,6 +583,14 @@ public class WalletService {
|
|||
}
|
||||
}
|
||||
|
||||
public int getNumPeers() {
|
||||
return numPeers.get();
|
||||
}
|
||||
|
||||
public ReadOnlyIntegerProperty numPeersProperty() {
|
||||
return numPeers;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Inner classes
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
|
@ -29,6 +29,10 @@ public class BaseP2PService implements P2PService {
|
|||
BaseP2PService.userThread = userThread;
|
||||
}
|
||||
|
||||
public static Executor getUserThread() {
|
||||
return userThread;
|
||||
}
|
||||
|
||||
protected Executor executor;
|
||||
protected PeerDHT peerDHT;
|
||||
|
||||
|
|
|
@ -21,6 +21,8 @@ import io.bitsquare.p2p.tomp2p.BootstrappedPeerBuilder;
|
|||
|
||||
import java.security.KeyPair;
|
||||
|
||||
import javafx.beans.property.ReadOnlyIntegerProperty;
|
||||
|
||||
import rx.Observable;
|
||||
|
||||
public interface ClientNode {
|
||||
|
@ -31,4 +33,6 @@ public interface ClientNode {
|
|||
Node getBootstrapNodeAddress();
|
||||
|
||||
Observable<BootstrappedPeerBuilder.State> bootstrap(KeyPair keyPair);
|
||||
|
||||
ReadOnlyIntegerProperty numPeersProperty();
|
||||
}
|
||||
|
|
|
@ -19,6 +19,7 @@ package io.bitsquare.p2p.tomp2p;
|
|||
|
||||
import io.bitsquare.BitsquareException;
|
||||
import io.bitsquare.common.handlers.ResultHandler;
|
||||
import io.bitsquare.p2p.BaseP2PService;
|
||||
import io.bitsquare.p2p.ClientNode;
|
||||
import io.bitsquare.p2p.Node;
|
||||
|
||||
|
@ -35,8 +36,16 @@ import javax.annotation.Nullable;
|
|||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import javafx.beans.property.IntegerProperty;
|
||||
import javafx.beans.property.ReadOnlyIntegerProperty;
|
||||
import javafx.beans.property.SimpleIntegerProperty;
|
||||
|
||||
import net.tomp2p.connection.PeerConnection;
|
||||
import net.tomp2p.connection.PeerException;
|
||||
import net.tomp2p.dht.PeerDHT;
|
||||
import net.tomp2p.peers.PeerAddress;
|
||||
import net.tomp2p.peers.PeerStatusListener;
|
||||
import net.tomp2p.peers.RTT;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
|
@ -54,7 +63,8 @@ public class TomP2PNode implements ClientNode {
|
|||
private BootstrappedPeerBuilder bootstrappedPeerBuilder;
|
||||
private final Subject<BootstrappedPeerBuilder.State, BootstrappedPeerBuilder.State> bootstrapStateSubject;
|
||||
private final List<ResultHandler> resultHandlers = new CopyOnWriteArrayList<>();
|
||||
|
||||
private final IntegerProperty numPeers = new SimpleIntegerProperty(0);
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Constructor
|
||||
|
@ -92,6 +102,20 @@ public class TomP2PNode implements ClientNode {
|
|||
public void onSuccess(@Nullable PeerDHT peerDHT) {
|
||||
if (peerDHT != null) {
|
||||
TomP2PNode.this.peerDHT = peerDHT;
|
||||
|
||||
peerDHT.peerBean().addPeerStatusListener(new PeerStatusListener() {
|
||||
@Override
|
||||
public boolean peerFailed(PeerAddress peerAddress, PeerException e) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean peerFound(PeerAddress peerAddress, PeerAddress peerAddress1, PeerConnection peerConnection, RTT rtt) {
|
||||
BaseP2PService.getUserThread().execute(() -> numPeers.set(peerDHT.peerBean().peerMap().size()));
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
resultHandlers.stream().forEach(ResultHandler::handleResult);
|
||||
bootstrapStateSubject.onCompleted();
|
||||
}
|
||||
|
@ -141,4 +165,12 @@ public class TomP2PNode implements ClientNode {
|
|||
public void removeResultHandler(ResultHandler resultHandler) {
|
||||
resultHandlers.remove(resultHandler);
|
||||
}
|
||||
|
||||
public int getNumPeers() {
|
||||
return numPeers.get();
|
||||
}
|
||||
|
||||
public ReadOnlyIntegerProperty numPeersProperty() {
|
||||
return numPeers;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue