Skip to content
Snippets Groups Projects
Commit edd63bd3 authored by Alexandr Mruchok's avatar Alexandr Mruchok
Browse files

[+] DapGetNetworkStatusCommand;

[+] DapNetwork::NAME, STATE, TARGET_STATE, NODE_ADDRESS, s_stateStrings, setProperties(), stringToState();
[+] DapNetworksList::setNetworkProperties(), add(),networkAdded(), listCompositionChanged();
parent ba1178d5
No related branches found
No related tags found
No related merge requests found
#include "DapNetwork.h" #include "DapNetwork.h"
#include <QMap>
#include <QJsonObject>
#include <QDebug>
const QString DapNetwork::NAME {"name"};
const QString DapNetwork::STATE {"state"};
const QString DapNetwork::TARGET_STATE {"targetState"};
const QString DapNetwork::NODE_ADDRESS {"nodeAddress"};
const QMap<DapNetwork::State, QString> DapNetwork::s_stateStrings = {
{ DapNetwork::State::OFFLINE, "NET_STATE_OFFLINE"},
{ DapNetwork::State::OFFLINE, "NET_STATE_ONLINE"}
};
DapNetwork::DapNetwork(const QString& a_name, QObject * a_parent /*= nullptr*/) DapNetwork::DapNetwork(const QString& a_name, QObject * a_parent /*= nullptr*/)
: QObject(a_parent) : QObject(a_parent)
...@@ -77,6 +91,23 @@ void DapNetwork::setState(DapNetwork::State a_state) ...@@ -77,6 +91,23 @@ void DapNetwork::setState(DapNetwork::State a_state)
emit this->stateChanged(DapNetwork::stateToString(a_state)); emit this->stateChanged(DapNetwork::stateToString(a_state));
} }
void DapNetwork::setProperties(QVariantMap a_stateMap)
{
QJsonValue jsonValue;
if (a_stateMap.contains(STATE))
this->setTargetState(DapNetwork::stringToState(a_stateMap[STATE].toString()));
if (a_stateMap.contains(TARGET_STATE))
this->setTargetState(DapNetwork::stringToState(a_stateMap[TARGET_STATE].toString()));
if (this->nodeAddress().isEmpty()) //Is not necrssary to set node address if already set
{
if (a_stateMap.contains(NODE_ADDRESS))
this->setNodeAddress(a_stateMap[NODE_ADDRESS].toString());
}
}
DapNetwork::State DapNetwork::targetState() const DapNetwork::State DapNetwork::targetState() const
{ {
return m_targetState; return m_targetState;
...@@ -94,16 +125,16 @@ void DapNetwork::setTargetState(DapNetwork::State a_targetState) ...@@ -94,16 +125,16 @@ void DapNetwork::setTargetState(DapNetwork::State a_targetState)
m_targetState = a_targetState; m_targetState = a_targetState;
emit this->targetStateChanged(DapNetwork::stateToString(a_targetState)); emit this->targetStateChanged(DapNetwork::stateToString(a_targetState));
// emit this->targetStateChanged(a_targetState); // emit this->targetStateChanged(a_targetState);
}
DapNetwork::State DapNetwork::stringToState(QString a_stateString)
{
return s_stateStrings.key(a_stateString);
} }
QString DapNetwork::stateToString(DapNetwork::State a_state) QString DapNetwork::stateToString(DapNetwork::State a_state)
{ {
switch (a_state) return s_stateStrings.value(a_state);
{
case State::Online: return "Online";
case State::Offline: return "Offline";
default: return {};
}
} }
...@@ -8,10 +8,15 @@ class DapNetwork: public QObject ...@@ -8,10 +8,15 @@ class DapNetwork: public QObject
Q_OBJECT Q_OBJECT
public: public:
static const QString NAME;
static const QString STATE;
static const QString TARGET_STATE;
static const QString NODE_ADDRESS;
enum State enum State
{ {
Online, ONLINE,
Offline OFFLINE
//... //...
}; };
...@@ -40,11 +45,14 @@ public: ...@@ -40,11 +45,14 @@ public:
State state() const; State state() const;
QString stateString() const; QString stateString() const;
void setState(State a_state); void setState(State a_state);
void setProperties(QVariantMap a_stateMap);
State targetState() const; State targetState() const;
QString targetStateString() const; QString targetStateString() const;
void setTargetState(State a_targetState); void setTargetState(State a_targetState);
State stringToState(QString a_stateString);
signals: signals:
void nameChanged(const QString& a_name); void nameChanged(const QString& a_name);
...@@ -67,6 +75,8 @@ private: ...@@ -67,6 +75,8 @@ private:
int m_linksCount{}; int m_linksCount{};
int m_activeLinksCount{}; int m_activeLinksCount{};
QString m_nodeAddress; QString m_nodeAddress;
static const QMap<State, QString> s_stateStrings;
}; };
Q_DECLARE_METATYPE(DapNetwork::State) Q_DECLARE_METATYPE(DapNetwork::State)
......
#include "DapGetNetworkStatusCommand.h"
#include <QRegularExpression>
/// Overloaded constructor.
/// @param asServiceName Service name.
/// @param parent Parent.
/// @details The parent must be either DapRPCSocket or DapRPCLocalServer.
/// @param asCliPath The path to cli nodes.
DapGetNetworkStatusCommand::DapGetNetworkStatusCommand(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 DapGetNetworkStatusCommand::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(arg2)
Q_UNUSED(arg3)
Q_UNUSED(arg4)
Q_UNUSED(arg5)
Q_UNUSED(arg6)
Q_UNUSED(arg7)
Q_UNUSED(arg8)
Q_UNUSED(arg9)
Q_UNUSED(arg10)
QString network(arg1.toString());
QProcess process;
QString command(QString("%1 net -net %2 get status").arg(m_sCliPath).arg(arg1.toString()));
process.start(command);
process.waitForFinished(-1);
QString result = QString::fromLatin1(process.readAll());
QRegularExpression rx(R"(Network "\S+" has state (\S+) \(target state (\S*)\), cur node address ([A-F0-9]{4}::[A-F0-9]{4}::[A-F0-9]{4}::[A-F0-9]{4}))");
QRegularExpressionMatch match = rx.match(result);
if (!match.hasMatch()) {
return {};
}
QJsonObject returnValue({
{"name" , network},
{"state" , match.captured(1)},
{"targetState" , match.captured(2)},
{"nodeAddress" , match.captured(3)}
});
return returnValue;
}
#ifndef DAPGETNETWORKSTATUSCOMMAND_H
#define DAPGETNETWORKSTATUSCOMMAND_H
#include <QProcess>
#include "DapAbstractCommand.h"
class DapGetNetworkStatusCommand : public DapAbstractCommand
{
public:
/// Overloaded constructor.
/// @param asServiceName Service name.
/// @param parent Parent.
/// @details The parent must be either DapRPCSocket or DapRPCLocalServer.
/// @param asCliPath The path to cli nodes.
DapGetNetworkStatusCommand(const QString &asServicename, QObject *parent = nullptr, 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(),
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 // DAPGETNETWORKSTATUSCOMMAND_H
...@@ -34,6 +34,7 @@ HEADERS += \ ...@@ -34,6 +34,7 @@ HEADERS += \
$$PWD/handlers/DapGetHistoryExecutedCmdCommand.h \ $$PWD/handlers/DapGetHistoryExecutedCmdCommand.h \
$$PWD/handlers/DapGetListNetworksCommand.h \ $$PWD/handlers/DapGetListNetworksCommand.h \
$$PWD/handlers/DapGetListWalletsCommand.h \ $$PWD/handlers/DapGetListWalletsCommand.h \
$$PWD/handlers/DapGetNetworkStatusCommand.h \
$$PWD/handlers/DapGetWalletsInfoCommand.h \ $$PWD/handlers/DapGetWalletsInfoCommand.h \
$$PWD/handlers/DapGetWalletAddressesCommand.h \ $$PWD/handlers/DapGetWalletAddressesCommand.h \
$$PWD/handlers/DapGetWalletHistoryCommand.h \ $$PWD/handlers/DapGetWalletHistoryCommand.h \
...@@ -72,6 +73,7 @@ SOURCES += \ ...@@ -72,6 +73,7 @@ SOURCES += \
$$PWD/handlers/DapGetHistoryExecutedCmdCommand.cpp \ $$PWD/handlers/DapGetHistoryExecutedCmdCommand.cpp \
$$PWD/handlers/DapGetListNetworksCommand.cpp \ $$PWD/handlers/DapGetListNetworksCommand.cpp \
$$PWD/handlers/DapGetListWalletsCommand.cpp \ $$PWD/handlers/DapGetListWalletsCommand.cpp \
$$PWD/handlers/DapGetNetworkStatusCommand.cpp \
$$PWD/handlers/DapGetWalletsInfoCommand.cpp \ $$PWD/handlers/DapGetWalletsInfoCommand.cpp \
$$PWD/handlers/DapGetWalletAddressesCommand.cpp \ $$PWD/handlers/DapGetWalletAddressesCommand.cpp \
$$PWD/handlers/DapGetWalletHistoryCommand.cpp \ $$PWD/handlers/DapGetWalletHistoryCommand.cpp \
......
#include "DapNetworksList.h" #include "DapNetworksList.h"
#include <QDebug> #include <QDebug>
#include <QJsonObject>
DapNetworksList::DapNetworksList(QObject *a_parrent /*= nullptr*/) DapNetworksList::DapNetworksList(QObject *a_parrent /*= nullptr*/)
:QObject(a_parrent) :QObject(a_parrent)
...@@ -28,6 +29,14 @@ DapNetwork *DapNetworksList::findNetwork(const QString &a_name) ...@@ -28,6 +29,14 @@ DapNetwork *DapNetworksList::findNetwork(const QString &a_name)
return *it; return *it;
} }
void DapNetworksList::setNetworkProperties(QVariantMap a_networkState)
{
DapNetwork* network = this->findNetwork(a_networkState.value(DapNetwork::NAME).toString());
network->setProperties(a_networkState);
}
void DapNetworksList::fill(QVariant a_stringList) void DapNetworksList::fill(QVariant a_stringList)
{ {
if (!a_stringList.isValid() || !a_stringList.canConvert<QStringList>()) if (!a_stringList.isValid() || !a_stringList.canConvert<QStringList>())
...@@ -36,14 +45,25 @@ void DapNetworksList::fill(QVariant a_stringList) ...@@ -36,14 +45,25 @@ void DapNetworksList::fill(QVariant a_stringList)
return; return;
} }
bool netwarkAdded = false;
for (QString curNetworkName: a_stringList.toStringList()) for (QString curNetworkName: a_stringList.toStringList())
{ {
DapNetwork* network = this->findNetwork(curNetworkName); DapNetwork* network = this->findNetwork(curNetworkName);
if (!network) if (!network)
{ {
network = new DapNetwork(curNetworkName, this); this->add(curNetworkName);
m_networks.append(network);
//TODO: get state netwarkAdded = true;
} }
} }
if (netwarkAdded)
emit this->listCompositionChanged();
}
void DapNetworksList::add(const QString &a_networkName)
{
DapNetwork* newNetwork = new DapNetwork(a_networkName, this);
m_networks.append(newNetwork);
emit this->networkAdded(newNetwork);
} }
...@@ -11,15 +11,23 @@ public: ...@@ -11,15 +11,23 @@ public:
DapNetworksList(QObject *a_parrent = nullptr); DapNetworksList(QObject *a_parrent = nullptr);
QList<QObject*> model(); QList<QObject*> model();
DapNetwork* findNetwork(const QString& a_name); DapNetwork* findNetwork(const QString& a_name);
void setNetworkProperties(QVariantMap a_networkState);
public slots: public slots:
void fill(QVariant a_stringList); void fill(QVariant a_stringList);
signals:
void networkAdded(DapNetwork* network);
void listCompositionChanged();
private: private:
//If you call this method you need manually emit listCompositionChanged();
//Not required to emit listCompositionChanged every time when network added
void add(const QString& a_networkName);
QList<DapNetwork*> m_networks; QList<DapNetwork*> m_networks;
}; };
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment