From e9448fa9b295ce589aa68a005226298536d1c0c2 Mon Sep 17 00:00:00 2001
From: "evgenii.tagiltsev" <tagiltsev.evgenii@gmail.com>
Date: Wed, 9 Oct 2019 13:08:59 +0200
Subject: [PATCH] [*] fixed QByteArray for RPC protocol

---
 .../DapCommandController.cpp                  | 65 ++++++++-----------
 CellFrameDashboardGUI/DapCommandController.h  |  4 --
 .../DapChainDashboardService.cpp              | 14 ----
 .../DapChainDashboardService.h                |  2 -
 DapRPCProtocol/DapRpcMessage.cpp              | 10 ++-
 DapRPCProtocol/DapRpcMessage.h                |  3 +-
 DapRPCProtocol/DapRpcService.cpp              | 20 ++++--
 DapRPCProtocol/DapRpcServiceProvider.cpp      |  2 +-
 8 files changed, 50 insertions(+), 70 deletions(-)

diff --git a/CellFrameDashboardGUI/DapCommandController.cpp b/CellFrameDashboardGUI/DapCommandController.cpp
index d3673ba..18d82a6 100755
--- a/CellFrameDashboardGUI/DapCommandController.cpp
+++ b/CellFrameDashboardGUI/DapCommandController.cpp
@@ -1,5 +1,8 @@
 #include "DapCommandController.h"
 
+#include <DapNodeType.h>
+#include <QDataStream>
+
 /// Overloaded constructor.
 /// @param apIODevice Data transfer device.
 /// @param apParent Parent.
@@ -36,7 +39,7 @@ void DapCommandController::processCommandResult()
         qWarning() << "Invalid response received";
         return;
     }
-    emit sigCommandResult(reply->response().result());
+    emit sigCommandResult(reply->response().toJsonValue());
 }
 
 /// Get node logs.
@@ -71,12 +74,6 @@ void DapCommandController::getCmdHistory()
     connect(reply, SIGNAL(finished()), this, SLOT(processGetCmdHistory()));
 }
 
-void DapCommandController::getTest()
-{
-    DapRpcServiceReply *reply = m_DAPRpcSocket->invokeRemoteMethod("RPCServer.getTest");
-    connect(reply, SIGNAL(finished()), this, SLOT(processGetTest()));
-}
-
 void DapCommandController::processChangedLog()
 {
 //    QStringList tempLogModel;
@@ -94,8 +91,8 @@ void DapCommandController::processGetNodeLogs()
         qWarning() << "Invalid response received";
         return;
     }
-    emit sigCommandResult(reply->response().result());
-    emit sigNodeLogsReceived(reply->response().result().toVariant().toStringList());
+    emit sigCommandResult(reply->response().toJsonValue());
+    emit sigNodeLogsReceived(reply->response().toJsonValue().toVariant().toStringList());
 }
 
 ///
@@ -107,9 +104,9 @@ void DapCommandController::processAddWallet()
         qWarning() << "Invalid response received";
         return;
     }
-    emit sigCommandResult(reply->response().result());
-    auto name = reply->response().result().toVariant().toStringList().at(0);
-    auto address = reply->response().result().toVariant().toStringList().at(1);
+    emit sigCommandResult(reply->response().toJsonValue());
+    auto name = reply->response().toJsonValue().toVariant().toStringList().at(0);
+    auto address = reply->response().toJsonValue().toVariant().toStringList().at(1);
     emit sigWalletAdded(name, address);
 }
 
@@ -122,8 +119,8 @@ void DapCommandController::processSendToken()
         return;
     }
     qInfo() << reply->response();
-    emit sigCommandResult(reply->response().result());
-    auto answer = reply->response().result().toVariant().toString();
+    emit sigCommandResult(reply->response().toJsonValue());
+    auto answer = reply->response().toJsonValue().toVariant().toString();
     emit onTokenSended(answer);
 }
 
@@ -135,22 +132,22 @@ void DapCommandController::processGetWallets()
         qWarning() << "Invalid response received";
         return;
     }
-    emit sigCommandResult(reply->response().result());
-    emit sigWalletsReceived(reply->response().result().toVariant().toMap());
+    emit sigCommandResult(reply->response().toJsonValue());
+    emit sigWalletsReceived(reply->response().toJsonValue().toVariant().toMap());
 }
 
 void DapCommandController::processGetWalletInfo()
 {
     qInfo() << "processGetWalletInfo()";
     DapRpcServiceReply *reply = static_cast<DapRpcServiceReply *>(sender());
-    if (!reply || reply->response().result().toVariant().toStringList().count() <= 0) {
+    if (!reply || reply->response().toJsonValue().toVariant().toStringList().count() <= 0) {
         qWarning() << "Invalid response received";
         return;
     }
-    emit sigCommandResult(reply->response().result());
-    QString name = reply->response().result().toVariant().toStringList().at(0);
-    QString address = reply->response().result().toVariant().toStringList().at(1);
-    QStringList temp = reply->response().result().toVariant().toStringList();
+    emit sigCommandResult(reply->response().toJsonValue());
+    QString name = reply->response().toJsonValue().toVariant().toStringList().at(0);
+    QString address = reply->response().toJsonValue().toVariant().toStringList().at(1);
+    QStringList temp = reply->response().toJsonValue().toVariant().toStringList();
     QStringList tokens;
     QStringList balance;
     for(int x{2}; x < temp.count(); x++)
@@ -173,28 +170,28 @@ void DapCommandController::processGetWalletInfo()
 void DapCommandController::processGetNodeNetwork()
 {
     DapRpcServiceReply *reply = static_cast<DapRpcServiceReply *>(sender());
-    emit sendNodeNetwork(reply->response().result().toVariant());
+    emit sendNodeNetwork(reply->response().toJsonValue().toVariant());
 }
 
 void DapCommandController::processGetNodeStatus()
 {
     DapRpcServiceReply *reply = static_cast<DapRpcServiceReply *>(sender());
-    emit sendNodeStatus(reply->response().result().toVariant());
+    emit sendNodeStatus(reply->response().toJsonValue().toVariant());
 }
 
 void DapCommandController::processExecuteCommand()
 {
     qInfo() << "processGetWalletInfo()";
     DapRpcServiceReply *reply = static_cast<DapRpcServiceReply *>(sender());
-    if (!reply || reply->response().result().toVariant().toStringList().isEmpty()) {
+    if (!reply || reply->response().toJsonValue().toVariant().toStringList().isEmpty()) {
 
         QString result = "Invalid response received";
         qWarning() << result;
         emit executeCommandChanged(result);
         return;
     }
-    emit sigCommandResult(reply->response().result());
-    QString result = reply->response().result().toVariant().toStringList().at(0);
+    emit sigCommandResult(reply->response().toJsonValue());
+    QString result = reply->response().toJsonValue().toVariant().toStringList().at(0);
     emit executeCommandChanged(result);
 }
 
@@ -202,32 +199,24 @@ void DapCommandController::processGetHistory()
 {
     qDebug() << "processGetHistory()";
     DapRpcServiceReply *reply = static_cast<DapRpcServiceReply *>(sender());
-    QVariant result = reply->response().result().toArray().toVariantList();
+    QVariant result = reply->response().toJsonValue().toArray().toVariantList();
     emit sendHistory(result);
 }
 
 void DapCommandController::processResponseConsole()
 {
     DapRpcServiceReply *reply = static_cast<DapRpcServiceReply *>(sender());
-    QString result = reply->response().result().toVariant().toString();
+    QString result = reply->response().toJsonValue().toVariant().toString();
     emit responseConsole(result);
 }
 
 void DapCommandController::processGetCmdHistory()
 {
     DapRpcServiceReply *reply = static_cast<DapRpcServiceReply *>(sender());
-    QString result = reply->response().result().toVariant().toString();
+    QString result = reply->response().toJsonValue().toVariant().toString();
     emit sigCmdHistory(result);
 }
 
-void DapCommandController::processGetTest()
-{
-    qDebug() << "!!!!!!!!processGetTest!!!!!!!!!!";
-    DapRpcServiceReply *reply = static_cast<DapRpcServiceReply *>(sender());
-    QByteArray result = reply->response().result().toVariant().toByteArray();
-    qDebug() << result;
-}
-
 /// Show or hide GUI client by clicking on the tray icon.
 /// @param aIsActivated Accepts true - when requesting to 
 /// display a client, falso - when requesting to hide a client.
@@ -266,8 +255,6 @@ void DapCommandController::getWallets()
 {
     DapRpcServiceReply *reply = m_DAPRpcSocket->invokeRemoteMethod("RPCServer.getWallets");
     connect(reply, SIGNAL(finished()), this, SLOT(processGetWallets()));
-    getTest();
-
 }
 
 void DapCommandController::getWalletInfo(const QString& asWalletName)
diff --git a/CellFrameDashboardGUI/DapCommandController.h b/CellFrameDashboardGUI/DapCommandController.h
index 2f6e3f0..845f95c 100755
--- a/CellFrameDashboardGUI/DapCommandController.h
+++ b/CellFrameDashboardGUI/DapCommandController.h
@@ -84,8 +84,6 @@ private slots:
 
     void processGetCmdHistory();
 
-    void processGetTest();
-
 public slots:
     /// Show or hide GUI client by clicking on the tray icon.
     /// @param aIsActivated Accepts true - when requesting to 
@@ -121,8 +119,6 @@ public slots:
     void requestConsole(const QString& aQueue);
     /// Get command history
     void getCmdHistory();
-
-    void getTest();
 };
 
 #endif // COMMANDCONTROLLER_H
diff --git a/CellFrameDashboardService/DapChainDashboardService.cpp b/CellFrameDashboardService/DapChainDashboardService.cpp
index c98290f..fa588c8 100755
--- a/CellFrameDashboardService/DapChainDashboardService.cpp
+++ b/CellFrameDashboardService/DapChainDashboardService.cpp
@@ -100,20 +100,6 @@ QString DapChainDashboardService::getCmdHistory() const
     return m_pDapChainConsoleHandler->getHistory();
 }
 
-QByteArray DapChainDashboardService::getTest() const
-{
-    QByteArray data;
-    QDataStream out(&data, QIODevice::WriteOnly);
-
-    DapNodeData nodeData;
-    nodeData.Cell = 1;
-    nodeData.Ipv4 = "mua";
-
-    out << nodeData;
-
-    return data;
-}
-
 void DapChainDashboardService::doRequestWallets()
 {
     m_pDapChainHistoryHandler->onRequestNewHistory(m_pDapChainWalletHandler->getWallets());
diff --git a/CellFrameDashboardService/DapChainDashboardService.h b/CellFrameDashboardService/DapChainDashboardService.h
index 6844f60..6f1fe70 100755
--- a/CellFrameDashboardService/DapChainDashboardService.h
+++ b/CellFrameDashboardService/DapChainDashboardService.h
@@ -111,8 +111,6 @@ public slots:
     /// @return history of last 50 commands
     QString getCmdHistory() const;
 
-    QByteArray getTest() const;
-
 private slots:
     void doRequestWallets();
     void doSendNewHistory(const QVariant& aData);
diff --git a/DapRPCProtocol/DapRpcMessage.cpp b/DapRPCProtocol/DapRpcMessage.cpp
index 43aba8e..a2a8359 100644
--- a/DapRPCProtocol/DapRpcMessage.cpp
+++ b/DapRPCProtocol/DapRpcMessage.cpp
@@ -305,7 +305,7 @@ QJsonValue DapRpcMessage::params() const
     return d->m_pObject->value(QLatin1String("params"));
 }
 
-QJsonValue DapRpcMessage::result() const
+QJsonValue DapRpcMessage::toJsonValue() const
 {
     if (d->m_type != DapRpcMessage::Response || !d->m_pObject)
         return QJsonValue(QJsonValue::Undefined);
@@ -313,6 +313,12 @@ QJsonValue DapRpcMessage::result() const
     return d->m_pObject->value(QLatin1String("result"));
 }
 
+QByteArray DapRpcMessage::toByteArray() const
+{
+    QJsonValue value = toJsonValue();
+    return QByteArray::fromHex(value.toVariant().toByteArray());
+}
+
 int DapRpcMessage::errorCode() const
 {
     if (d->m_type != DapRpcMessage::Error || !d->m_pObject)
@@ -374,7 +380,7 @@ QDebug operator<<(QDebug dbg, const DapRpcMessage &msg)
         dbg.nospace() << ", method=" << msg.method()
                       << ", params=" << msg.params();
     } else if (msg.type() == DapRpcMessage::Response) {
-        dbg.nospace() << ", result=" << msg.result();
+        dbg.nospace() << ", result=" << msg.toJsonValue();
     } else if (msg.type() == DapRpcMessage::Error) {
         dbg.nospace() << ", code=" << msg.errorCode()
                       << ", message=" << msg.errorMessage()
diff --git a/DapRPCProtocol/DapRpcMessage.h b/DapRPCProtocol/DapRpcMessage.h
index dc3164b..489ae57 100644
--- a/DapRPCProtocol/DapRpcMessage.h
+++ b/DapRPCProtocol/DapRpcMessage.h
@@ -71,7 +71,8 @@ public:
     QJsonValue params() const;
 
     // response
-    QJsonValue result() const;
+    QJsonValue toJsonValue() const;
+    QByteArray toByteArray() const;
 
     // error
     int errorCode() const;
diff --git a/DapRPCProtocol/DapRpcService.cpp b/DapRPCProtocol/DapRpcService.cpp
index 34aad0f..6c37bbf 100644
--- a/DapRPCProtocol/DapRpcService.cpp
+++ b/DapRPCProtocol/DapRpcService.cpp
@@ -93,13 +93,18 @@ int DapRpcService::convertVariantTypeToJSType(int aType)
     case QMetaType::ULongLong:
     case QMetaType::UShort:
     case QMetaType::UChar:
-        case QMetaType::QByteArray:
-    case QMetaType::Float: return QJsonValue::Double;    // all numeric types in js are doubles
+    case QMetaType::Float:
+        return QJsonValue::Double;    // all numeric types in js are doubles
     case QMetaType::QVariantList:
-    case QMetaType::QStringList: return QJsonValue::Array;
-    case QMetaType::QVariantMap: return QJsonValue::Object;
-    case QMetaType::QString: return QJsonValue::String;
-    case QMetaType::Bool: return QJsonValue::Bool;
+    case QMetaType::QStringList:
+        return QJsonValue::Array;
+    case QMetaType::QVariantMap:
+        return QJsonValue::Object;
+    case QMetaType::QByteArray:
+    case QMetaType::QString:
+        return QJsonValue::String;
+    case QMetaType::Bool:
+        return QJsonValue::Bool;
     default: break;
     }
 
@@ -223,8 +228,9 @@ QJsonValue DapRpcService::convertReturnValue(QVariant &aReturnValue)
     case QMetaType::QStringList:
     case QMetaType::QVariantList:
     case QMetaType::QVariantMap:
-    case QMetaType::QByteArray:
         return QJsonValue::fromVariant(aReturnValue);
+    case QMetaType::QByteArray:
+        return QJsonValue::fromVariant(aReturnValue.toByteArray().toHex());
     default:
         // if a conversion operator was registered it will be used
         if (aReturnValue.convert(QMetaType::QJsonValue))
diff --git a/DapRPCProtocol/DapRpcServiceProvider.cpp b/DapRPCProtocol/DapRpcServiceProvider.cpp
index 106e9fe..71168a8 100644
--- a/DapRPCProtocol/DapRpcServiceProvider.cpp
+++ b/DapRPCProtocol/DapRpcServiceProvider.cpp
@@ -89,5 +89,5 @@ void DapRpcServiceProvider::processMessage(DapRpcSocket *apSocket, const DapRpcM
             apSocket->notify(error);
             break;
         }
-    };
+    }
 }
-- 
GitLab