From ef76b3daab676dcfc77860329315787956ae99cf Mon Sep 17 00:00:00 2001 From: Daniel Larimer Date: Mon, 13 Jul 2015 13:56:30 -0400 Subject: [PATCH] creating thread/basic linking --- programs/light_client/CMakeLists.txt | 4 +-- programs/light_client/ClientDataModel.cpp | 34 ++++++++++++++++++++++- programs/light_client/ClientDataModel.hpp | 26 +++++++++++++++-- 3 files changed, 58 insertions(+), 6 deletions(-) diff --git a/programs/light_client/CMakeLists.txt b/programs/light_client/CMakeLists.txt index c6f0c344..26b4a9b1 100644 --- a/programs/light_client/CMakeLists.txt +++ b/programs/light_client/CMakeLists.txt @@ -16,6 +16,6 @@ file(GLOB QML qml/*) qt5_add_resources(QML_QRC qml/qml.qrc) add_executable(light_client ClientDataModel.cpp ClientDataModel.hpp main.cpp ${QML_QRC}) -add_dependencies(light_client gen_qrc) +add_dependencies(light_client gen_qrc ) -target_link_libraries(light_client PRIVATE Qt5::Core Qt5::Widgets Qt5::Quick graphene_chain graphene_utilities fc) +target_link_libraries(light_client PRIVATE Qt5::Core Qt5::Widgets Qt5::Quick graphene_chain graphene_utilities fc graphene_app ) diff --git a/programs/light_client/ClientDataModel.cpp b/programs/light_client/ClientDataModel.cpp index dd9740f3..6d5f3182 100644 --- a/programs/light_client/ClientDataModel.cpp +++ b/programs/light_client/ClientDataModel.cpp @@ -1,5 +1,12 @@ #include "ClientDataModel.hpp" +#include +#include + +#include + +ChainDataModel::ChainDataModel( fc::thread& t, QObject* parent ) +:QObject(parent),m_thread(&t){} Account* ChainDataModel::getAccount(quint64 id) const { @@ -24,6 +31,31 @@ QQmlListProperty Account::balances() -void GrapheneApplication::initialize( QString datadir, QString apiurl ) +GrapheneApplication::GrapheneApplication( QObject* parent ) +:QObject( parent ),m_thread("app") +{ + m_model = new ChainDataModel( m_thread, this ); +} +GrapheneApplication::~GrapheneApplication() { } + +bool GrapheneApplication::start( QString datadir, QString apiurl ) +{ + if( !m_thread.is_current() ) + { + m_done = m_thread.async( [=](){ return start( datadir, apiurl ); } ); + return true; + } + try { + auto con = m_client.connect( apiurl.toStdString() ); + auto apic = std::make_shared(*con); + + + } catch ( const fc::exception& e ) + { + + return false; + } + return true; +} diff --git a/programs/light_client/ClientDataModel.hpp b/programs/light_client/ClientDataModel.hpp index 27ee1610..c13e3201 100644 --- a/programs/light_client/ClientDataModel.hpp +++ b/programs/light_client/ClientDataModel.hpp @@ -1,8 +1,14 @@ #pragma once +#pragma GCC diagnostic ignored "-Wunknown-pragmas" +#include +#include #include #include + + + class Asset : public QObject { Q_OBJECT @@ -51,6 +57,13 @@ class ChainDataModel : public QObject { public: Q_INVOKABLE Account* getAccount(quint64 id)const; Q_INVOKABLE Account* getAccount(QString name)const; + + ChainDataModel(){} + ChainDataModel( fc::thread& t, QObject* parent = nullptr ); + +private: + fc::thread* m_thread = nullptr; + std::string m_api_url; }; class GrapheneApplication : public QObject { @@ -59,16 +72,23 @@ class GrapheneApplication : public QObject { Q_PROPERTY(ChainDataModel* model READ model CONSTANT) Q_PROPERTY(bool isConnected READ isConnected NOTIFY isConnectedChanged) - ChainDataModel* m_model; - bool m_isConnected; + fc::thread m_thread; + ChainDataModel* m_model = nullptr; + bool m_isConnected = false; + + fc::http::websocket_client m_client; + fc::future m_done; public: + GrapheneApplication( QObject* parent = nullptr ); + ~GrapheneApplication(); + ChainDataModel* model() const { return m_model; } - Q_INVOKABLE void initialize(QString dataDirectory, QString apiUrl); + Q_INVOKABLE bool start(QString dataDirectory, QString apiUrl); bool isConnected() const {