Skip to content
Snippets Groups Projects
DapChainNodeNetworkModel.h 2.55 KiB
#ifndef DAPCHAINNODENETWORKMODEL_H
#define DAPCHAINNODENETWORKMODEL_H

#include <QObject>
#include <QTimer>
#include <QHostAddress>
#include <QVariant>

#include "DapNodeType.h"

/// Class model for Network Explorer
class DapChainNodeNetworkModel : public QObject
{
    Q_OBJECT

private:
    /// Data about network with nodes
    QVariant m_data;
    /// Timer for request
    QTimer* m_timerRequest;

protected:
    /// Data about whole network with nodes
    DapNodeMap m_nodeMap;

public:
    /// Standard constructor
    explicit DapChainNodeNetworkModel(QObject *parent = nullptr);

    /// Get an instance of a class.
    /// @return Instance of a class.
    Q_INVOKABLE static DapChainNodeNetworkModel &getInstance();
    /// Get data about whole network with nodes
    /// @return QMap where key is address and value is structure about one node
    const DapNodeMap* getDataMap() const;
    /// Get data about node by address
    /// @param aAddress Address of node
    /// @return data's node structure
    const DapNodeData* getNodeData(const QString& aAddress) const;

    /// Get current address of node
    /// @return address of current node
    QString getCurrentAddress() const;
    /// Get status of node
    /// @param aAddress Address of node
    /// @return It is true if node is online
    Q_INVOKABLE bool isNodeOnline(const QString& aAddress) const;

public slots:
    /// Receive new network data and repaint the screen
    /// @param aData data of node network
    void receiveNewNetwork(const QVariant& aData);
    /// Receive changes status for nodes
    /// @param aData data of node network
    void receiveNodeStatus(const QVariant& aData);
    /// Send request to service about changing status of node
    /// @param aIsOnline set new status to node
    Q_INVOKABLE void sendRequestNodeStatus(const bool aIsOnline);
    /// Start timer for request new data of network
    Q_INVOKABLE void startRequest();
    /// @param aTimeout in milliseconds for delay
    Q_INVOKABLE void startRequest(const int aTimeout);
    /// Stop timer for request data of network
    Q_INVOKABLE void stopRequest();

signals:
    /// Signal for changing network
    void changeNodeNetwork();
    /// Signal for request network
    void requestNodeNetwork();
    /// Signal for request status of node
    /// @param status status of node
    void requestNodeStatus(bool status);
    /// SIgnal about changing status node
    /// @param node Address of node
    /// @param aIsOnline new status to node
    void changeStatusNode(QString asNode, bool aIsOnline);
};


#endif // DAPCHAINNODENETWORKMODEL_H