summaryrefslogtreecommitdiff
path: root/indra/newview/lleventpoll.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/lleventpoll.cpp')
-rw-r--r--indra/newview/lleventpoll.cpp261
1 files changed, 134 insertions, 127 deletions
diff --git a/indra/newview/lleventpoll.cpp b/indra/newview/lleventpoll.cpp
index 4452a134ae..8c362a0ac5 100644
--- a/indra/newview/lleventpoll.cpp
+++ b/indra/newview/lleventpoll.cpp
@@ -16,155 +16,162 @@
#include "llviewerregion.h"
#include "message.h"
-class LLEventPoll::Impl : LLHTTPClient::Responder
+namespace
{
-public:
- static Impl& start(const std::string& pollURL);
- void stop();
-
-private:
- Impl(const std::string& pollURL);
- ~Impl();
-
- void makeRequest();
- void handleMessage(const LLSD& content);
- virtual void error(U32 status, const std::string& reason);
- virtual void result(const LLSD& content);
-
-private:
- typedef LLHTTPClient::ResponderPtr Ptr;
-
- Ptr mPtr;
- bool mDone;
-
- std::string mPollURL;
- std::string mSender;
-
- LLSD mAcknowledge;
-
- // these are only here for debugging so we can see which poller is which
- static int sCount;
- int mCount;
-};
-
-//static
-LLEventPoll::Impl& LLEventPoll::Impl::start(
- const std::string& pollURL)
-{
- Impl* i = new Impl(pollURL);
- llinfos << "LLEventPoll::Impl::start <" << i->mCount << "> "
- << pollURL << llendl;
- return *i;
-}
-
-void LLEventPoll::Impl::stop()
-{
- lldebugs << "LLEventPoll::Impl::stop <" << mCount << "> "
- << mPollURL << llendl;
- // there should be a way to stop a LLHTTPClient request in progress
- mDone = true;
- mPtr = NULL;
-}
-
-int LLEventPoll::Impl::sCount = 0;
-
-LLEventPoll::Impl::Impl(const std::string& pollURL)
- : mPtr(NULL), mDone(false),
- mPollURL(pollURL),
- mCount(++sCount)
-{
- mPtr = this;
- //extract host and port of simulator to set as sender
- LLViewerRegion *regionp = gAgent.getRegion();
- if (!regionp)
+ class LLEventPollResponder : public LLHTTPClient::Responder
+ {
+ public:
+
+ static LLHTTPClient::ResponderPtr start(const std::string& pollURL, const LLHost& sender);
+ void stop();
+
+ private:
+ LLEventPollResponder(const std::string& pollURL, const LLHost& sender);
+ ~LLEventPollResponder();
+
+ void makeRequest();
+ void handleMessage(const LLSD& content);
+ virtual void error(U32 status, const std::string& reason);
+ virtual void result(const LLSD& content);
+
+ private:
+
+ bool mDone;
+
+ std::string mPollURL;
+ std::string mSender;
+
+ LLSD mAcknowledge;
+
+ // these are only here for debugging so we can see which poller is which
+ static int sCount;
+ int mCount;
+ };
+
+ //static
+ LLHTTPClient::ResponderPtr LLEventPollResponder::start(
+ const std::string& pollURL, const LLHost& sender)
{
- llerrs << "LLEventPoll initialized before region is added." << llendl;
+ LLHTTPClient::ResponderPtr result = new LLEventPollResponder(pollURL, sender);
+ llinfos << "LLEventPollResponder::start <" << sCount << "> "
+ << pollURL << llendl;
+ return result;
}
- mSender = regionp->getHost().getIPandPort();
- llinfos << "LLEventPoll initialized with sender " << mSender << llendl;
- makeRequest();
-}
-LLEventPoll::Impl::~Impl()
-{
- lldebugs << "LLEventPoll::Impl::~Impl <" << mCount << "> "
- << mPollURL << llendl;
-}
-
-void LLEventPoll::Impl::makeRequest()
-{
- LLSD request;
- request["ack"] = mAcknowledge;
- request["done"] = mDone;
-
- lldebugs << "LLEventPoll::Impl::makeRequest <" << mCount << "> ack = "
- << LLSDXMLStreamer(mAcknowledge) << llendl;
- LLHTTPClient::post(mPollURL, request, mPtr);
-}
+ void LLEventPollResponder::stop()
+ {
+ llinfos << "LLEventPollResponder::stop <" << mCount << "> "
+ << mPollURL << llendl;
+ // there should be a way to stop a LLHTTPClient request in progress
+ mDone = true;
+ }
-void LLEventPoll::Impl::handleMessage(const LLSD& content)
-{
- std::string msg_name = content["message"];
- LLSD message;
- message["sender"] = mSender;
- message["body"] = content["body"];
- LLMessageSystem::dispatch(msg_name, message);
-}
+ int LLEventPollResponder::sCount = 0;
-//virtual
-void LLEventPoll::Impl::error(U32 status, const std::string& reason)
-{
- if (mDone) return;
+ LLEventPollResponder::LLEventPollResponder(const std::string& pollURL, const LLHost& sender)
+ : mDone(false),
+ mPollURL(pollURL),
+ mCount(++sCount)
+ {
+ //extract host and port of simulator to set as sender
+ LLViewerRegion *regionp = gAgent.getRegion();
+ if (!regionp)
+ {
+ llerrs << "LLEventPoll initialized before region is added." << llendl;
+ }
+ mSender = sender.getIPandPort();
+ llinfos << "LLEventPoll initialized with sender " << mSender << llendl;
+ makeRequest();
+ }
- if(status != 499)
+ LLEventPollResponder::~LLEventPollResponder()
{
- llwarns << "LLEventPoll::Impl::error: <" << mCount << "> got "
- << status << ": " << reason
- << (mDone ? " -- done" : "") << llendl;
stop();
- return;
+ lldebugs << "LLEventPollResponder::~Impl <" << mCount << "> "
+ << mPollURL << llendl;
}
- makeRequest();
-}
+ void LLEventPollResponder::makeRequest()
+ {
+ LLSD request;
+ request["ack"] = mAcknowledge;
+ request["done"] = mDone;
+
+ lldebugs << "LLEventPollResponder::makeRequest <" << mCount << "> ack = "
+ << LLSDXMLStreamer(mAcknowledge) << llendl;
+ LLHTTPClient::post(mPollURL, request, this);
+ }
-//virtual
-void LLEventPoll::Impl::result(const LLSD& content)
-{
- lldebugs << "LLEventPoll::Impl::result <" << mCount << ">"
- << (mDone ? " -- done" : "") << llendl;
-
- if (mDone) return;
-
- mAcknowledge = content["id"];
- LLSD events = content["events"];
-
- if(mAcknowledge.isUndefined())
+ void LLEventPollResponder::handleMessage(const LLSD& content)
{
- llwarns << "LLEventPoll::Impl: id undefined" << llendl;
+ std::string msg_name = content["message"];
+ LLSD message;
+ message["sender"] = mSender;
+ message["body"] = content["body"];
+ LLMessageSystem::dispatch(msg_name, message);
}
-
- llinfos << "LLEventPoll::Impl::completed <" << mCount << "> " << events.size() << "events (id "
- << LLSDXMLStreamer(mAcknowledge) << ")" << llendl;
-
- LLSD::array_const_iterator i = events.beginArray();
- LLSD::array_const_iterator end = events.endArray();
- for (; i != end; ++i)
+
+ //virtual
+ void LLEventPollResponder::error(U32 status, const std::string& reason)
{
- if (i->has("message"))
+ if (mDone) return;
+
+ if(status != 499)
{
- handleMessage(*i);
+ llwarns << "LLEventPollResponder::error: <" << mCount << "> got "
+ << status << ": " << reason
+ << (mDone ? " -- done" : "") << llendl;
+ stop();
+ return;
}
+
+ makeRequest();
}
-
- makeRequest();
+
+ //virtual
+ void LLEventPollResponder::result(const LLSD& content)
+ {
+ lldebugs << "LLEventPollResponder::result <" << mCount << ">"
+ << (mDone ? " -- done" : "") << llendl;
+
+ if (mDone) return;
+
+ if (!content.get("events") ||
+ !content.get("id"))
+ {
+ llwarns << "received event poll with no events or id key" << llendl;
+ return;
+ }
+
+ mAcknowledge = content["id"];
+ LLSD events = content["events"];
+
+ if(mAcknowledge.isUndefined())
+ {
+ llwarns << "LLEventPollResponder: id undefined" << llendl;
+ }
+
+ llinfos << "LLEventPollResponder::completed <" << mCount << "> " << events.size() << "events (id "
+ << LLSDXMLStreamer(mAcknowledge) << ")" << llendl;
+
+ LLSD::array_const_iterator i = events.beginArray();
+ LLSD::array_const_iterator end = events.endArray();
+ for (; i != end; ++i)
+ {
+ if (i->has("message"))
+ {
+ handleMessage(*i);
+ }
+ }
+
+ makeRequest();
+ }
}
-LLEventPoll::LLEventPoll(const std::string& pollURL)
- : impl(Impl::start(pollURL))
+LLEventPoll::LLEventPoll(const std::string& pollURL, const LLHost& sender)
+ : mImpl(LLEventPollResponder::start(pollURL, sender))
{ }
LLEventPoll::~LLEventPoll()
{
- impl.stop();
}