/* This makes sure to call functions on the node which only return cached data. This ensures it returns promptly, and doesn't hang waiting for a response when the node is having issues. */ void status(CryptoNote::INode &node, CryptoNote::WalletGreen &wallet) { uint32_t localHeight = node.getLastLocalBlockHeight(); uint32_t remoteHeight = node.getLastKnownBlockHeight(); uint32_t walletHeight = wallet.getBlockCount() - 1; /* Print the heights of local, remote, and wallet */ printHeights(localHeight, remoteHeight, walletHeight); std::cout << std::endl; /* Print the network and wallet sync status in percentage */ printSyncStatus(localHeight, remoteHeight, walletHeight); std::cout << std::endl; /* Print the network hashrate, based on the last local block */ printHashrate(node.getLastLocalBlockHeaderInfo().difficulty); /* Print the amount of peers we have */ printPeerCount(node.getPeerCount()); std::cout << std::endl; /* Print a summary of the sync status */ printSyncSummary(localHeight, remoteHeight, walletHeight); }
bool BaseFunctionalTests::waitForPeerCount(CryptoNote::INode& node, size_t expectedPeerCount) { PeerCountWaiter peerCountWaiter(m_dispatcher); node.addObserver(&peerCountWaiter); if (node.getPeerCount() != expectedPeerCount) { peerCountWaiter.wait(expectedPeerCount); } node.removeObserver(&peerCountWaiter); // TODO workaround: make sure ObserverManager doesn't have local pointers to peerCountWaiter, so it can be destroyed std::this_thread::sleep_for(std::chrono::milliseconds(100)); // Run all spawned handlers from PeerCountWaiter::peerCountUpdated m_dispatcher.yield(); return !peerCountWaiter.m_timedout; }