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

View File

@@ -10,16 +10,26 @@ CSiaApi::CSiaApi(const SiaHostConfig& hostConfig, CSiaDriveConfig* siaDriveConfi
_siaDriveConfig(siaDriveConfig),
_wallet(new CSiaWallet(_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()
{
_refreshThread->StopAutoThread();
//TODO Make this an option to lock on exit
//_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)
{
if (path.Length())

View File

@@ -4,20 +4,17 @@ using namespace Sia::Api;
CSiaApi::_CSiaConsensus::_CSiaConsensus(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig) :
CSiaBase(siaCurl, siaDriveConfig),
CAutoThread(siaCurl, siaDriveConfig),
_Height(0),
_Synced(false),
_CurrentBlock(L"")
{
StartAutoThread();
}
CSiaApi::_CSiaConsensus::~_CSiaConsensus()
{
StopAutoThread();
}
void CSiaApi::_CSiaConsensus::AutoThreadCallback(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig)
void CSiaApi::_CSiaConsensus::Refresh(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig)
{
json 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) :
CSiaBase(siaCurl, siaDriveConfig),
CAutoThread(siaCurl, siaDriveConfig),
_Funds(0),
_Hosts(0),
_Unspent(0),
_TotalUsedBytes(0),
_TotalUploadProgress(100)
{
StartAutoThread();
}
CSiaApi::_CSiaRenter::~_CSiaRenter()
{
StopAutoThread();
}
void CSiaApi::_CSiaRenter::AutoThreadCallback(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig)
void CSiaApi::_CSiaRenter::Refresh(const CSiaCurl& siaCurl, CSiaDriveConfig* siaDriveConfig)
{
json 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)))
{
fileTree->BuildTree(result);
{
std::lock_guard<std::mutex> l(_fileTreeMutex);
_fileTree = fileTree;
}
auto fileList = fileTree->GetFileList();
if (fileList.size())
{
@@ -142,14 +143,11 @@ SiaApiError CSiaApi::_CSiaRenter::DownloadFile(const SString& siaPath, const SSt
SiaApiError CSiaApi::_CSiaRenter::GetFileTree(CSiaFileTreePtr& siaFileTree) const
{
SiaApiError ret = SiaApiError::RequestError;
siaFileTree.reset(new CSiaFileTree(GetSiaCurl(), &GetSiaDriveConfig()));
json result;
if (ApiSuccess(GetSiaCurl().Get(L"/renter/files", result)))
{
siaFileTree->BuildTree(result);
ret = SiaApiError::Success;
}
siaFileTree = _fileTree;
if (!siaFileTree)
{
siaFileTree.reset(new CSiaFileTree(GetSiaCurl(), &GetSiaDriveConfig()));
}
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) :
CSiaBase(siaCurl, siaDriveConfig),
CAutoThread(siaCurl, siaDriveConfig),
_Created(false),
_Locked(false),
_Connected(false),
_ConfirmedBalance(0),
_UnconfirmedBalance(0)
{
StartAutoThread();
}
CSiaApi::_CSiaWallet::~_CSiaWallet()
{
StopAutoThread();
}
/*{
@@ -48,7 +45,7 @@ CSiaApi::_CSiaWallet::~_CSiaWallet()
"siafundbalance": "1", // siafunds, 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 created = false;