Land SKU descriptions by coro

master
Rider Linden 2015-05-29 13:17:03 -07:00
parent 4fb5881871
commit d41ad508bf
2 changed files with 45 additions and 39 deletions

View File

@ -32,31 +32,10 @@
#include "llagent.h" // for gAgent
#include "lltrans.h"
#include "llviewerregion.h"
#include "llcorehttputil.h"
class LLProductInfoRequestResponder : public LLHTTPClient::Responder
{
LOG_CLASS(LLProductInfoRequestResponder);
private:
//If we get back a normal response, handle it here
/* virtual */ void httpSuccess()
{
const LLSD& content = getContent();
if (!content.isArray())
{
failureResult(HTTP_INTERNAL_ERROR, "Malformed response contents", content);
return;
}
LLProductInfoRequestManager::instance().setSkuDescriptions(getContent());
}
//If we get back an error (not found, etc...), handle it here
/* virtual */ void httpFailure()
{
LL_WARNS() << dumpResponse() << LL_ENDL;
}
};
LLProductInfoRequestManager::LLProductInfoRequestManager() : mSkuDescriptions()
LLProductInfoRequestManager::LLProductInfoRequestManager():
mSkuDescriptions()
{
}
@ -65,15 +44,11 @@ void LLProductInfoRequestManager::initSingleton()
std::string url = gAgent.getRegion()->getCapability("ProductInfoRequest");
if (!url.empty())
{
LLHTTPClient::get(url, new LLProductInfoRequestResponder());
LLCoros::instance().launch("LLProductInfoRequestManager::getLandDescriptionsCoro",
boost::bind(&LLProductInfoRequestManager::getLandDescriptionsCoro, this, _1, url));
}
}
void LLProductInfoRequestManager::setSkuDescriptions(const LLSD& content)
{
mSkuDescriptions = content;
}
std::string LLProductInfoRequestManager::getDescriptionForSku(const std::string& sku)
{
// The description LLSD is an array of maps; each array entry
@ -90,3 +65,31 @@ std::string LLProductInfoRequestManager::getDescriptionForSku(const std::string&
}
return LLTrans::getString("land_type_unknown");
}
void LLProductInfoRequestManager::getLandDescriptionsCoro(LLCoros::self& self, std::string url)
{
LLCore::HttpRequest::policy_t httpPolicy(LLCore::HttpRequest::DEFAULT_POLICY_ID);
LLCoreHttpUtil::HttpCoroutineAdapter::ptr_t
httpAdapter(new LLCoreHttpUtil::HttpCoroutineAdapter("genericPostCoro", httpPolicy));
LLCore::HttpRequest::ptr_t httpRequest(new LLCore::HttpRequest);
LLSD result = httpAdapter->getAndYield(self, httpRequest, url);
LLSD httpResults = result[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS];
LLCore::HttpStatus status = LLCoreHttpUtil::HttpCoroutineAdapter::getStatusFromLLSD(httpResults);
if (!status)
{
return;
}
if (result.has(LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS_CONTENT) &&
result[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS_CONTENT].isArray())
{
mSkuDescriptions = result[LLCoreHttpUtil::HttpCoroutineAdapter::HTTP_RESULTS_CONTENT];
}
else
{
LL_WARNS() << "Land SKU description response is malformed" << LL_ENDL;
}
}

View File

@ -30,25 +30,28 @@
#include "llhttpclient.h"
#include "llmemory.h"
#include "lleventcoro.h"
#include "llcoros.h"
/*
This is a singleton to manage a cache of information about land types.
The land system provides a capability to get information about the
set of possible land sku, name, and description information.
We use description in the UI, but the sku is provided in the various
messages; this tool provides translation between the systems.
/**
* This is a singleton to manage a cache of information about land types.
* The land system provides a capability to get information about the
* set of possible land sku, name, and description information.
* We use description in the UI, but the sku is provided in the various
* messages; this tool provides translation between the systems.
*/
class LLProductInfoRequestManager : public LLSingleton<LLProductInfoRequestManager>
{
public:
LLProductInfoRequestManager();
void setSkuDescriptions(const LLSD& content);
std::string getDescriptionForSku(const std::string& sku);
private:
friend class LLSingleton<LLProductInfoRequestManager>;
/* virtual */ void initSingleton();
LLSD mSkuDescriptions;
void getLandDescriptionsCoro(LLCoros::self& self, std::string url);
LLSD mSkuDescriptions;
};
#endif // LL_LLPRODUCTINFOREQUEST_H