Skip to content

Commit

Permalink
SimpleMode: automatic public nodes discovering and switching
Browse files Browse the repository at this point in the history
  • Loading branch information
xiphon committed Sep 9, 2019
1 parent a2d30b9 commit 996cd8e
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 20 deletions.
4 changes: 0 additions & 4 deletions js/Utils.js
Expand Up @@ -94,10 +94,6 @@ function netTypeToString(){
return nettype == 1 ? qsTr("Testnet") : nettype == 2 ? qsTr("Stagenet") : qsTr("Mainnet"); return nettype == 1 ? qsTr("Testnet") : nettype == 2 ? qsTr("Stagenet") : qsTr("Mainnet");
} }


function randomChoice(arr){
return arr[Math.floor(Math.random() * arr.length)];
}

function epoch(){ function epoch(){
return Math.floor((new Date).getTime()/1000); return Math.floor((new Date).getTime()/1000);
} }
Expand Down
51 changes: 40 additions & 11 deletions main.qml
Expand Up @@ -692,7 +692,8 @@ ApplicationWindow {
simpleModeConnectionTimer.stop(); simpleModeConnectionTimer.stop();


appWindow.showProcessingSplash(qsTr("Waiting for daemon to start...")) appWindow.showProcessingSplash(qsTr("Waiting for daemon to start..."))
daemonManager.start(flags, persistentSettings.nettype, persistentSettings.blockchainDataDir, persistentSettings.bootstrapNodeAddress); const noSync = appWindow.walletMode === 0;
daemonManager.start(flags, persistentSettings.nettype, persistentSettings.blockchainDataDir, persistentSettings.bootstrapNodeAddress, noSync);
persistentSettings.daemonFlags = flags persistentSettings.daemonFlags = flags
} }


Expand Down Expand Up @@ -2008,21 +2009,39 @@ ApplicationWindow {
onTriggered: appWindow.themeTransition = true; onTriggered: appWindow.themeTransition = true;
} }


function haveToChangeDaemonNoSyncFlag() {
if (!appWindow.daemonRunning) {
return false;
}
if (appWindow.walletMode == 0 && !daemonManager.noSync()) {
return true;
}
if (appWindow.walletMode == 1 && daemonManager.noSync()) {
return true;
}
return false;
}

function checkSimpleModeConnection(){ function checkSimpleModeConnection(){
// auto-connection mechanism for simple mode // auto-connection mechanism for simple mode
if(persistentSettings.nettype != NetworkType.MAINNET) return;
if(appWindow.walletMode >= 2) return; if(appWindow.walletMode >= 2) return;


var disconnected = leftPanel.networkStatus.connected === Wallet.ConnectionStatus_Disconnected; var disconnected = leftPanel.networkStatus.connected === Wallet.ConnectionStatus_Disconnected;
var disconnectedEpoch = appWindow.disconnectedEpoch; var disconnectedEpoch = appWindow.disconnectedEpoch;

const disconnectedTimeoutSec = 30;
const firstCheckDelaySec = 2;
if(disconnectedEpoch === 0){ if(disconnectedEpoch === 0){
appWindow.disconnectedEpoch = Utils.epoch(); appWindow.disconnectedEpoch = Utils.epoch() + firstCheckDelaySec - disconnectedTimeoutSec;
} }


// disconnected longer than 5 seconds? if (haveToChangeDaemonNoSyncFlag()) {
if(disconnected && disconnectedEpoch > 0 && (Utils.epoch() - disconnectedEpoch) >= 5){ appWindow.stopDaemon();
// for bootstrap mode, first wait until daemon is killed }
if(appWindow.walletMode === 1 && appWindow.daemonRunning) {
// disconnected longer than N seconds?
if(disconnected && disconnectedEpoch > 0 && (Utils.epoch() - disconnectedEpoch) >= disconnectedTimeoutSec){
if(appWindow.daemonRunning) {
appWindow.stopDaemon(); appWindow.stopDaemon();
return; return;
} }
Expand Down Expand Up @@ -2110,7 +2129,12 @@ ApplicationWindow {
closeAccepted(); closeAccepted();
}; };


confirmationDialog.open() if (appWindow.walletMode == 0) {
stopDaemon();
closeAccepted();
} else {
confirmationDialog.open();
}


} else { } else {
closeAccepted(); closeAccepted();
Expand Down Expand Up @@ -2222,11 +2246,16 @@ ApplicationWindow {
} }


function changeWalletMode(mode){ function changeWalletMode(mode){
appWindow.disconnectedEpoch = 0;
appWindow.walletMode = mode; appWindow.walletMode = mode;
persistentSettings.walletMode = mode; persistentSettings.walletMode = mode;
persistentSettings.useRemoteNode = mode === 0 ? true : false; if (mode < 2) {
if (mode < 2 && (middlePanel.settingsView.settingsStateViewState === "Node" || middlePanel.settingsView.settingsStateViewState === "Log")) { persistentSettings.useRemoteNode = false;
middlePanel.settingsView.settingsStateViewState = "Wallet" persistentSettings.bootstrapNodeAddress = "auto";

if (middlePanel.settingsView.settingsStateViewState === "Node" || middlePanel.settingsView.settingsStateViewState === "Log") {
middlePanel.settingsView.settingsStateViewState = "Wallet"
}
} }
console.log("walletMode changed: " + (mode === 0 ? "simple": mode === 1 ? "simple (bootstrap)" : "Advanced")); console.log("walletMode changed: " + (mode === 0 ? "simple": mode === 1 ? "simple (bootstrap)" : "Advanced"));
} }
Expand Down
19 changes: 15 additions & 4 deletions src/daemon/DaemonManager.cpp
Expand Up @@ -61,7 +61,7 @@ DaemonManager *DaemonManager::instance(const QStringList *args)
return m_instance; return m_instance;
} }


bool DaemonManager::start(const QString &flags, NetworkType::Type nettype, const QString &dataDir, const QString &bootstrapNodeAddress) bool DaemonManager::start(const QString &flags, NetworkType::Type nettype, const QString &dataDir, const QString &bootstrapNodeAddress, bool noSync /* = false*/)
{ {
// prepare command line arguments and pass to monerod // prepare command line arguments and pass to monerod
QStringList arguments; QStringList arguments;
Expand Down Expand Up @@ -99,6 +99,10 @@ bool DaemonManager::start(const QString &flags, NetworkType::Type nettype, const
arguments << "--bootstrap-daemon-address" << bootstrapNodeAddress; arguments << "--bootstrap-daemon-address" << bootstrapNodeAddress;
} }


if (noSync) {
arguments << "--no-sync";
}

arguments << "--check-updates" << "disabled"; arguments << "--check-updates" << "disabled";


// --max-concurrency based on threads available. max: 6 // --max-concurrency based on threads available. max: 6
Expand Down Expand Up @@ -131,11 +135,13 @@ bool DaemonManager::start(const QString &flags, NetworkType::Type nettype, const
} }


// Start start watcher // Start start watcher
m_scheduler.run([this, nettype] { m_scheduler.run([this, nettype, noSync] {
if (startWatcher(nettype)) if (startWatcher(nettype)) {
emit daemonStarted(); emit daemonStarted();
else m_noSync = noSync;
} else {
emit daemonStartFailure(); emit daemonStartFailure();
}
}); });


return true; return true;
Expand Down Expand Up @@ -244,6 +250,11 @@ bool DaemonManager::running(NetworkType::Type nettype) const
return false; return false;
} }


bool DaemonManager::noSync() const noexcept
{
return m_noSync;
}

void DaemonManager::runningAsync(NetworkType::Type nettype, const QJSValue& callback) const void DaemonManager::runningAsync(NetworkType::Type nettype, const QJSValue& callback) const
{ {
m_scheduler.run([this, nettype] { m_scheduler.run([this, nettype] {
Expand Down
4 changes: 3 additions & 1 deletion src/daemon/DaemonManager.h
Expand Up @@ -44,9 +44,10 @@ class DaemonManager : public QObject


static DaemonManager * instance(const QStringList *args); static DaemonManager * instance(const QStringList *args);


Q_INVOKABLE bool start(const QString &flags, NetworkType::Type nettype, const QString &dataDir = "", const QString &bootstrapNodeAddress = ""); Q_INVOKABLE bool start(const QString &flags, NetworkType::Type nettype, const QString &dataDir = "", const QString &bootstrapNodeAddress = "", bool noSync = false);
Q_INVOKABLE bool stop(NetworkType::Type nettype); Q_INVOKABLE bool stop(NetworkType::Type nettype);


Q_INVOKABLE bool noSync() const noexcept;
// return true if daemon process is started // return true if daemon process is started
Q_INVOKABLE void runningAsync(NetworkType::Type nettype, const QJSValue& callback) const; Q_INVOKABLE void runningAsync(NetworkType::Type nettype, const QJSValue& callback) const;
// Send daemon command from qml and prints output in console window. // Send daemon command from qml and prints output in console window.
Expand Down Expand Up @@ -82,6 +83,7 @@ public slots:
QString m_monerod; QString m_monerod;
bool m_has_daemon = true; bool m_has_daemon = true;
bool m_app_exit = false; bool m_app_exit = false;
bool m_noSync = false;


mutable FutureScheduler m_scheduler; mutable FutureScheduler m_scheduler;
}; };
Expand Down

0 comments on commit 996cd8e

Please sign in to comment.