Single refresh thread
This commit is contained in:
@@ -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);
|
||||
|
@@ -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())
|
||||
|
@@ -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)))
|
||||
|
@@ -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;
|
||||
}
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user