3
0
mirror of https://github.com/Qortal/altcoinj.git synced 2025-01-31 15:22:16 +00:00

Add/Remove wallets to the connected peers as they are added/removed

to/from the PeerGroup
This commit is contained in:
Oscar Guindzberg 2014-10-09 14:05:16 -03:00
parent a24f5cb5ba
commit 2010614fd6
2 changed files with 44 additions and 0 deletions

View File

@ -881,6 +881,9 @@ public class PeerGroup extends AbstractExecutionThreadService implements Transac
wallet.setTransactionBroadcaster(this); wallet.setTransactionBroadcaster(this);
wallet.addEventListener(walletEventListener, Threading.SAME_THREAD); wallet.addEventListener(walletEventListener, Threading.SAME_THREAD);
addPeerFilterProvider(wallet); addPeerFilterProvider(wallet);
for (Peer peer : peers) {
peer.addWallet(wallet);
}
} finally { } finally {
lock.unlock(); lock.unlock();
} }
@ -919,6 +922,9 @@ public class PeerGroup extends AbstractExecutionThreadService implements Transac
peerFilterProviders.remove(wallet); peerFilterProviders.remove(wallet);
wallet.removeEventListener(walletEventListener); wallet.removeEventListener(walletEventListener);
wallet.setTransactionBroadcaster(null); wallet.setTransactionBroadcaster(null);
for (Peer peer : peers) {
peer.removeWallet(wallet);
}
} }
public static enum FilterRecalculateMode { public static enum FilterRecalculateMode {

View File

@ -241,6 +241,44 @@ public class PeerGroupTest extends TestWithPeerGroup {
peerGroup.awaitTerminated(); peerGroup.awaitTerminated();
} }
@Test
public void receiveTxBroadcastOnAddedWallet() throws Exception {
// Check that when we receive transactions on all our peers, we do the right thing.
peerGroup.startAsync();
peerGroup.awaitRunning();
// Create a peer.
InboundMessageQueuer p1 = connectPeer(1);
Wallet wallet2 = new Wallet(unitTestParams);
ECKey key2 = wallet2.freshReceiveKey();
Address address2 = key2.toAddress(unitTestParams);
peerGroup.addWallet(wallet2);
blockChain.addWallet(wallet2);
assertTrue(outbound(p1) instanceof BloomFilter);
assertTrue(outbound(p1) instanceof MemoryPoolMessage);
Coin value = COIN;
Transaction t1 = FakeTxBuilder.createFakeTx(unitTestParams, value, address2);
InventoryMessage inv = new InventoryMessage(unitTestParams);
inv.addTransaction(t1);
inbound(p1, inv);
assertTrue(outbound(p1) instanceof GetDataMessage);
inbound(p1, t1);
// Asks for dependency.
GetDataMessage getdata = (GetDataMessage) outbound(p1);
assertNotNull(getdata);
inbound(p1, new NotFoundMessage(unitTestParams, getdata.getItems()));
pingAndWait(p1);
assertEquals(value, wallet2.getBalance(Wallet.BalanceType.ESTIMATED));
peerGroup.stopAsync();
peerGroup.awaitTerminated();
}
@Test @Test
public void singleDownloadPeer1() throws Exception { public void singleDownloadPeer1() throws Exception {
// Check that we don't attempt to retrieve blocks on multiple peers. // Check that we don't attempt to retrieve blocks on multiple peers.