From fb54deb21a32ba3a98c84fd9829e7c493bf6d357 Mon Sep 17 00:00:00 2001
From: alexandr <alexandrmruchok@gmail.com>
Date: Wed, 21 Oct 2020 10:59:03 +0300
Subject: [PATCH] [+] DapNetworkGoToCommand

---
 .../wallet/handlers/DapNetworkGoToCommand.cpp | 49 +++++++++++++++++++
 chain/wallet/handlers/DapNetworkGoToCommand.h | 40 +++++++++++++++
 chain/wallet/libdap-qt-chain-wallet.pri       |  2 +
 3 files changed, 91 insertions(+)
 create mode 100644 chain/wallet/handlers/DapNetworkGoToCommand.cpp
 create mode 100644 chain/wallet/handlers/DapNetworkGoToCommand.h

diff --git a/chain/wallet/handlers/DapNetworkGoToCommand.cpp b/chain/wallet/handlers/DapNetworkGoToCommand.cpp
new file mode 100644
index 00000000..2979fb63
--- /dev/null
+++ b/chain/wallet/handlers/DapNetworkGoToCommand.cpp
@@ -0,0 +1,49 @@
+#include "DapNetworkGoToCommand.h"
+
+#include <QRegularExpression>
+
+/// Overloaded constructor.
+/// @param asServiceName Service name.
+/// @param parent Parent.
+/// @details The parent must be either DapRPCSocket or DapRPCLocalServer.
+DapNetworkGoToCommand::DapNetworkGoToCommand(const QString &asServicename, QObject *parent, const QString &asCliPath)
+    : DapAbstractCommand(asServicename, parent, asCliPath)
+{
+
+}
+
+/// Send a response to the client.
+/// @details Performed on the service side.
+/// @param arg1...arg10 Parameters.
+/// @return Reply to client.
+QVariant DapNetworkGoToCommand::respondToClient(const QVariant &arg1, const QVariant &arg2, const QVariant &arg3,
+                                              const QVariant &arg4, const QVariant &arg5, const QVariant &arg6,
+                                              const QVariant &arg7, const QVariant &arg8, const QVariant &arg9,
+                                              const QVariant &arg10)
+{
+    Q_UNUSED(arg3)
+    Q_UNUSED(arg4)
+    Q_UNUSED(arg5)
+    Q_UNUSED(arg5)
+    Q_UNUSED(arg6)
+    Q_UNUSED(arg7)
+    Q_UNUSED(arg8)
+    Q_UNUSED(arg9)
+    Q_UNUSED(arg10)
+
+    QProcess process;
+    QString command(QString("%1 net -net %2 go %3").arg(m_sCliPath).arg(arg1.toString()).arg(arg2.toString()));
+    process.start(command);
+    process.waitForFinished(-1);
+    QString result = QString::fromLatin1(process.readAll());
+
+    QVariantMap resultObj;
+
+    QRegularExpression rx(QString(R"(Network "%1" go from state \S+ to (\S+))").arg(arg1.toString()));
+    QRegularExpressionMatch match = rx.match(result);
+    if (!match.hasMatch()) {
+        return QString();
+    }
+
+    return match.captured(1);
+}
diff --git a/chain/wallet/handlers/DapNetworkGoToCommand.h b/chain/wallet/handlers/DapNetworkGoToCommand.h
new file mode 100644
index 00000000..b2741b08
--- /dev/null
+++ b/chain/wallet/handlers/DapNetworkGoToCommand.h
@@ -0,0 +1,40 @@
+/****************************************************************************
+**
+** This file is part of the libdap-qt-ui-chain-wallet library.
+** 
+** The class implements the functionality of creating a new wallet.
+**
+****************************************************************************/
+
+#ifndef DAPNETWORKGOTOCOMMAND_H
+#define DAPNETWORKGOTOCOMMAND_H
+
+#include <QProcess>
+#include <QString>
+
+#include "DapAbstractCommand.h"
+#include "DapNetwork.h"
+
+
+class DapNetworkGoToCommand : public DapAbstractCommand
+{
+public:
+    /// Overloaded constructor.
+    /// @param asServiceName Service name.
+    /// @param parent Parent.
+    /// @details The parent must be either DapRPCSocket or DapRPCLocalServer.
+    explicit DapNetworkGoToCommand(const QString &asServicename, QObject *parent, const QString &asCliPath = QString());
+
+public slots:
+    /// Send a response to the client.
+    /// @details Performed on the service side.
+    /// @param arg1...arg10 Parameters.
+    /// @return Reply to client.
+    QVariant respondToClient(const QVariant &arg1 = QVariant(), const QVariant &arg2 = QVariant(),    //original
+                             const QVariant &arg3 = QVariant(), const QVariant &arg4 = QVariant(),
+                             const QVariant &arg5 = QVariant(), const QVariant &arg6 = QVariant(),
+                             const QVariant &arg7 = QVariant(), const QVariant &arg8 = QVariant(),
+                             const QVariant &arg9 = QVariant(), const QVariant &arg10 = QVariant()) override;
+    };
+
+#endif // DAPNETWORKGOTOCOMMAND_H
diff --git a/chain/wallet/libdap-qt-chain-wallet.pri b/chain/wallet/libdap-qt-chain-wallet.pri
index 87d46f64..2702f45a 100644
--- a/chain/wallet/libdap-qt-chain-wallet.pri
+++ b/chain/wallet/libdap-qt-chain-wallet.pri
@@ -41,6 +41,7 @@ HEADERS += \
     $$PWD/handlers/DapGetWalletInfoCommand.h \
     $$PWD/handlers/DapGetWalletTokenInfoCommand.h \
     $$PWD/handlers/DapMempoolProcessCommand.h \
+    $$PWD/handlers/DapNetworkGoToCommand.h \
     $$PWD/handlers/DapQuitApplicationCommand.h \
     $$PWD/handlers/DapRunCmdCommand.h \
     $$PWD/handlers/DapSaveHistoryExecutedCmdCommand.h \
@@ -80,6 +81,7 @@ SOURCES += \
     $$PWD/handlers/DapGetWalletInfoCommand.cpp \
     $$PWD/handlers/DapGetWalletTokenInfoCommand.cpp \
     $$PWD/handlers/DapMempoolProcessCommand.cpp \
+    $$PWD/handlers/DapNetworkGoToCommand.cpp \
     $$PWD/handlers/DapQuitApplicationCommand.cpp \
     $$PWD/handlers/DapRunCmdCommand.cpp \
     $$PWD/handlers/DapSaveHistoryExecutedCmdCommand.cpp \
-- 
GitLab