1
0

Single refresh thread

This commit is contained in:
Scott E. Graves
2017-03-25 09:40:09 -05:00
parent c04c70ede8
commit b14d7f039f
5 changed files with 42 additions and 35 deletions

View File

@@ -112,8 +112,7 @@ public:
}; };
class SIADRIVE_EXPORTABLE _CSiaWallet : class SIADRIVE_EXPORTABLE _CSiaWallet :
public virtual CSiaBase, public virtual CSiaBase
public virtual CAutoThread
{ {
friend CSiaApi; friend CSiaApi;
private: private:
@@ -130,8 +129,8 @@ public:
Property(SiaCurrency, UnconfirmedBalance, public, private) Property(SiaCurrency, UnconfirmedBalance, public, private)
Property(SString, ReceiveAddress, public, private) Property(SString, ReceiveAddress, public, private)
protected: private:
virtual void AutoThreadCallback(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig) override; virtual void Refresh(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig);
public: public:
_SiaApiError Create(const _SiaSeedLanguage& seedLanguage, SString& seed); _SiaApiError Create(const _SiaSeedLanguage& seedLanguage, SString& seed);
@@ -141,8 +140,7 @@ public:
}; };
class SIADRIVE_EXPORTABLE _CSiaRenter : class SIADRIVE_EXPORTABLE _CSiaRenter :
public virtual CSiaBase, public virtual CSiaBase
public virtual CAutoThread
{ {
friend CSiaApi; friend CSiaApi;
@@ -158,8 +156,12 @@ public:
Property(std::uint64_t, TotalUsedBytes, public, private) Property(std::uint64_t, TotalUsedBytes, public, private)
Property(std::uint32_t, TotalUploadProgress, public, private) Property(std::uint32_t, TotalUploadProgress, public, private)
protected: private:
virtual void AutoThreadCallback(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig) override; std::shared_ptr<_CSiaFileTree> _fileTree;
std::mutex _fileTreeMutex;
private:
void Refresh(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig);
public: public:
_SiaApiError FileExists(const SString& siaPath, bool& exists) const; _SiaApiError FileExists(const SString& siaPath, bool& exists) const;
@@ -168,8 +170,7 @@ public:
}; };
class SIADRIVE_EXPORTABLE _CSiaConsensus : class SIADRIVE_EXPORTABLE _CSiaConsensus :
public virtual CSiaBase, public virtual CSiaBase
public virtual CAutoThread
{ {
friend CSiaApi; friend CSiaApi;
@@ -184,8 +185,8 @@ public:
Property(bool, Synced, public, private) Property(bool, Synced, public, private)
Property(SString, CurrentBlock, public, private) Property(SString, CurrentBlock, public, private)
protected: private:
virtual void AutoThreadCallback(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig) override; void Refresh(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig);
}; };
public: public:
@@ -201,6 +202,10 @@ private:
std::shared_ptr<_CSiaWallet> _wallet; std::shared_ptr<_CSiaWallet> _wallet;
std::shared_ptr<_CSiaRenter> _renter; std::shared_ptr<_CSiaRenter> _renter;
std::shared_ptr<_CSiaConsensus> _consensus; std::shared_ptr<_CSiaConsensus> _consensus;
std::unique_ptr<CAutoThread> _refreshThread;
private:
void Refresh(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig);
public: public:
static SString FormatToSiaPath(SString path); static SString FormatToSiaPath(SString path);

View File

@@ -10,16 +10,26 @@ CSiaApi::CSiaApi(const SiaHostConfig& hostConfig, CSiaDriveConfig* siaDriveConfi
_siaDriveConfig(siaDriveConfig), _siaDriveConfig(siaDriveConfig),
_wallet(new CSiaWallet(_siaCurl, siaDriveConfig)), _wallet(new CSiaWallet(_siaCurl, siaDriveConfig)),
_renter(new CSiaRenter(_siaCurl, siaDriveConfig)), _renter(new CSiaRenter(_siaCurl, siaDriveConfig)),
_consensus(new CSiaConsensus(_siaCurl, siaDriveConfig)) _consensus(new CSiaConsensus(_siaCurl, siaDriveConfig)),
_refreshThread(new CAutoThread(_siaCurl, _siaDriveConfig, [this] (const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig) { this->Refresh(siaCurl, siaDriveConfig); }))
{ {
_refreshThread->StartAutoThread();
} }
CSiaApi::~CSiaApi() CSiaApi::~CSiaApi()
{ {
_refreshThread->StopAutoThread();
//TODO Make this an option to lock on exit //TODO Make this an option to lock on exit
//_wallet->Lock(); //_wallet->Lock();
} }
void CSiaApi::Refresh(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig)
{
this->_wallet->Refresh(siaCurl, siaDriveConfig);
this->_consensus->Refresh(siaCurl, siaDriveConfig);
this->_renter->Refresh(siaCurl, siaDriveConfig);
}
SString CSiaApi::FormatToSiaPath(SString path) SString CSiaApi::FormatToSiaPath(SString path)
{ {
if (path.Length()) if (path.Length())

View File

@@ -4,20 +4,17 @@ using namespace Sia::Api;
CSiaApi::_CSiaConsensus::_CSiaConsensus(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig) : CSiaApi::_CSiaConsensus::_CSiaConsensus(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig) :
CSiaBase(siaCurl, siaDriveConfig), CSiaBase(siaCurl, siaDriveConfig),
CAutoThread(siaCurl, siaDriveConfig),
_Height(0), _Height(0),
_Synced(false), _Synced(false),
_CurrentBlock(L"") _CurrentBlock(L"")
{ {
StartAutoThread();
} }
CSiaApi::_CSiaConsensus::~_CSiaConsensus() CSiaApi::_CSiaConsensus::~_CSiaConsensus()
{ {
StopAutoThread();
} }
void CSiaApi::_CSiaConsensus::AutoThreadCallback(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig) void CSiaApi::_CSiaConsensus::Refresh(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig)
{ {
json result; json result;
if (ApiSuccess(siaCurl.Get(L"/consensus", result))) if (ApiSuccess(siaCurl.Get(L"/consensus", result)))

View File

@@ -47,22 +47,19 @@ using namespace Sia::Api;
}*/ }*/
CSiaApi::_CSiaRenter::_CSiaRenter(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig) : CSiaApi::_CSiaRenter::_CSiaRenter(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig) :
CSiaBase(siaCurl, siaDriveConfig), CSiaBase(siaCurl, siaDriveConfig),
CAutoThread(siaCurl, siaDriveConfig),
_Funds(0), _Funds(0),
_Hosts(0), _Hosts(0),
_Unspent(0), _Unspent(0),
_TotalUsedBytes(0), _TotalUsedBytes(0),
_TotalUploadProgress(100) _TotalUploadProgress(100)
{ {
StartAutoThread();
} }
CSiaApi::_CSiaRenter::~_CSiaRenter() CSiaApi::_CSiaRenter::~_CSiaRenter()
{ {
StopAutoThread();
} }
void CSiaApi::_CSiaRenter::AutoThreadCallback(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig) void CSiaApi::_CSiaRenter::Refresh(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig)
{ {
json result; json result;
if (ApiSuccess(siaCurl.Get(L"/renter", result))) if (ApiSuccess(siaCurl.Get(L"/renter", result)))
@@ -78,7 +75,11 @@ void CSiaApi::_CSiaRenter::AutoThreadCallback(const CSiaCurl& siaCurl, CSiaDrive
if (ApiSuccess(siaCurl.Get(L"/renter/files", result))) if (ApiSuccess(siaCurl.Get(L"/renter/files", result)))
{ {
fileTree->BuildTree(result); fileTree->BuildTree(result);
{
std::lock_guard<std::mutex> l(_fileTreeMutex);
_fileTree = fileTree;
}
auto fileList = fileTree->GetFileList(); auto fileList = fileTree->GetFileList();
if (fileList.size()) if (fileList.size())
{ {
@@ -142,14 +143,11 @@ SiaApiError CSiaApi::_CSiaRenter::DownloadFile(const SString& siaPath, const SSt
SiaApiError CSiaApi::_CSiaRenter::GetFileTree(CSiaFileTreePtr& siaFileTree) const SiaApiError CSiaApi::_CSiaRenter::GetFileTree(CSiaFileTreePtr& siaFileTree) const
{ {
SiaApiError ret = SiaApiError::RequestError; siaFileTree = _fileTree;
siaFileTree.reset(new CSiaFileTree(GetSiaCurl(), &GetSiaDriveConfig())); if (!siaFileTree)
json result; {
if (ApiSuccess(GetSiaCurl().Get(L"/renter/files", result))) siaFileTree.reset(new CSiaFileTree(GetSiaCurl(), &GetSiaDriveConfig()));
{ }
siaFileTree->BuildTree(result);
ret = SiaApiError::Success;
}
return ret; return SiaApiError::Success;
} }

View File

@@ -22,19 +22,16 @@ static SString SeedLangToString(const SiaSeedLanguage& lang)
CSiaApi::_CSiaWallet::_CSiaWallet(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig) : CSiaApi::_CSiaWallet::_CSiaWallet(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig) :
CSiaBase(siaCurl, siaDriveConfig), CSiaBase(siaCurl, siaDriveConfig),
CAutoThread(siaCurl, siaDriveConfig),
_Created(false), _Created(false),
_Locked(false), _Locked(false),
_Connected(false), _Connected(false),
_ConfirmedBalance(0), _ConfirmedBalance(0),
_UnconfirmedBalance(0) _UnconfirmedBalance(0)
{ {
StartAutoThread();
} }
CSiaApi::_CSiaWallet::~_CSiaWallet() CSiaApi::_CSiaWallet::~_CSiaWallet()
{ {
StopAutoThread();
} }
/*{ /*{
@@ -48,7 +45,7 @@ CSiaApi::_CSiaWallet::~_CSiaWallet()
"siafundbalance": "1", // siafunds, big int "siafundbalance": "1", // siafunds, big int
"siacoinclaimbalance": "9001", // hastings, big int "siacoinclaimbalance": "9001", // hastings, big int
}*/ }*/
void CSiaApi::_CSiaWallet::AutoThreadCallback(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig) void CSiaApi::_CSiaWallet::Refresh(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig)
{ {
bool locked = false; bool locked = false;
bool created = false; bool created = false;