Tiny bit of lleventnotifier cleanup. Only functional difference is that server is notified when an event notification response is handled... also the notifier is deleted (leakfix? I can't find where it was deleted on this case before this new change)..
This commit is contained in:
@@ -78,24 +78,42 @@ void LLEventNotifier::update()
|
|||||||
{
|
{
|
||||||
LLEventNotification *np = iter->second;
|
LLEventNotification *np = iter->second;
|
||||||
|
|
||||||
|
iter++;
|
||||||
if (np->getEventDate() < (alert_time))
|
if (np->getEventDate() < (alert_time))
|
||||||
{
|
{
|
||||||
LLSD args;
|
LLSD args;
|
||||||
args["NAME"] = np->getEventName();
|
args["NAME"] = np->getEventName();
|
||||||
args["DATE"] = np->getEventDateStr();
|
args["DATE"] = np->getEventDateStr();
|
||||||
LLNotifications::instance().add("EventNotification", args, LLSD(),
|
LLNotifications::instance().add("EventNotification", args, LLSD(),
|
||||||
boost::bind(&LLEventNotification::handleResponse, np, _1, _2));
|
boost::bind(&LLEventNotifier::handleResponse, this, np->getEventID(), np->getEventPosGlobal(), _1, _2));
|
||||||
mEventNotifications.erase(iter++);
|
remove(np->getEventID());
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
iter++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mNotificationTimer.reset();
|
mNotificationTimer.reset();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool LLEventNotifier::handleResponse(U32 eventId, LLVector3d eventPos, const LLSD& notification, const LLSD& response)
|
||||||
|
{
|
||||||
|
S32 option = LLNotification::getSelectedOption(notification, response);
|
||||||
|
switch (option)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
gAgent.teleportViaLocation(eventPos);
|
||||||
|
gFloaterWorldMap->trackLocation(eventPos);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
gDisplayEventHack = TRUE;
|
||||||
|
LLFloaterDirectory::showEvents(eventId);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// We could clean up the notification on the server now if we really wanted to.
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void LLEventNotifier::load(const LLUserAuth::options_t& event_options)
|
void LLEventNotifier::load(const LLUserAuth::options_t& event_options)
|
||||||
{
|
{
|
||||||
LLUserAuth::options_t::const_iterator resp_it;
|
LLUserAuth::options_t::const_iterator resp_it;
|
||||||
@@ -117,6 +135,19 @@ void LLEventNotifier::load(const LLUserAuth::options_t& event_options)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LLEventNotifier::add(U32 eventId)
|
||||||
|
{
|
||||||
|
|
||||||
|
gMessageSystem->newMessageFast(_PREHASH_EventInfoRequest);
|
||||||
|
gMessageSystem->nextBlockFast(_PREHASH_AgentData);
|
||||||
|
gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
|
||||||
|
gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID() );
|
||||||
|
gMessageSystem->nextBlockFast(_PREHASH_EventData);
|
||||||
|
gMessageSystem->addU32Fast(_PREHASH_EventID, eventId);
|
||||||
|
gAgent.sendReliableMessage();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
BOOL LLEventNotifier::hasNotification(const U32 event_id)
|
BOOL LLEventNotifier::hasNotification(const U32 event_id)
|
||||||
{
|
{
|
||||||
if (mEventNotifications.find(event_id) != mEventNotifications.end())
|
if (mEventNotifications.find(event_id) != mEventNotifications.end())
|
||||||
@@ -137,14 +168,7 @@ void LLEventNotifier::add(LLEventInfo &event_info)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Push up a message to tell the server we have this notification.
|
serverPushRequest(event_info.mID, true);
|
||||||
gMessageSystem->newMessage("EventNotificationAddRequest");
|
|
||||||
gMessageSystem->nextBlockFast(_PREHASH_AgentData);
|
|
||||||
gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
|
|
||||||
gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
|
|
||||||
gMessageSystem->nextBlock("EventData");
|
|
||||||
gMessageSystem->addU32("EventID", event_info.mID);
|
|
||||||
gAgent.sendReliableMessage();
|
|
||||||
|
|
||||||
LLEventNotification *enp = new LLEventNotification;
|
LLEventNotification *enp = new LLEventNotification;
|
||||||
enp->load(event_info);
|
enp->load(event_info);
|
||||||
@@ -161,17 +185,22 @@ void LLEventNotifier::remove(const U32 event_id)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Push up a message to tell the server to remove this notification.
|
serverPushRequest(event_id, false);
|
||||||
gMessageSystem->newMessage("EventNotificationRemoveRequest");
|
delete iter->second;
|
||||||
|
mEventNotifications.erase(iter);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void LLEventNotifier::serverPushRequest(U32 event_id, bool add)
|
||||||
|
{
|
||||||
|
// Push up a message to tell the server we have this notification.
|
||||||
|
gMessageSystem->newMessage(add?"EventNotificationAddRequest":"EventNotificationRemoveRequest");
|
||||||
gMessageSystem->nextBlockFast(_PREHASH_AgentData);
|
gMessageSystem->nextBlockFast(_PREHASH_AgentData);
|
||||||
gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
|
gMessageSystem->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
|
||||||
gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
|
gMessageSystem->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
|
||||||
gMessageSystem->nextBlock("EventData");
|
gMessageSystem->nextBlock("EventData");
|
||||||
gMessageSystem->addU32("EventID", event_id);
|
gMessageSystem->addU32("EventID", event_id);
|
||||||
gAgent.sendReliableMessage();
|
gAgent.sendReliableMessage();
|
||||||
|
|
||||||
delete iter->second;
|
|
||||||
mEventNotifications.erase(iter);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
LLEventNotification::LLEventNotification() :
|
LLEventNotification::LLEventNotification() :
|
||||||
@@ -185,26 +214,6 @@ LLEventNotification::~LLEventNotification()
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
bool LLEventNotification::handleResponse(const LLSD& notification, const LLSD& response)
|
|
||||||
{
|
|
||||||
S32 option = LLNotification::getSelectedOption(notification, response);
|
|
||||||
switch (option)
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
gAgent.teleportViaLocation(getEventPosGlobal());
|
|
||||||
gFloaterWorldMap->trackLocation(getEventPosGlobal());
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
gDisplayEventHack = TRUE;
|
|
||||||
LLFloaterDirectory::showEvents(getEventID());
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// We could clean up the notification on the server now if we really wanted to.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL LLEventNotification::load(const LLUserAuth::response_t &response)
|
BOOL LLEventNotification::load(const LLUserAuth::response_t &response)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -39,6 +39,7 @@
|
|||||||
|
|
||||||
class LLEventInfo;
|
class LLEventInfo;
|
||||||
class LLEventNotification;
|
class LLEventNotification;
|
||||||
|
class LLMessageSystem;
|
||||||
|
|
||||||
|
|
||||||
class LLEventNotifier
|
class LLEventNotifier
|
||||||
@@ -48,14 +49,17 @@ public:
|
|||||||
virtual ~LLEventNotifier();
|
virtual ~LLEventNotifier();
|
||||||
|
|
||||||
void update(); // Notify the user of the event if it's coming up
|
void update(); // Notify the user of the event if it's coming up
|
||||||
|
void add(LLEventInfo &event_info); // Add a new notification for an event
|
||||||
|
void add(U32 eventId);
|
||||||
|
|
||||||
void load(const LLUserAuth::options_t& event_options); // In the format that it comes in from LLUserAuth
|
void load(const LLUserAuth::options_t& event_options); // In the format that it comes in from LLUserAuth
|
||||||
void add(LLEventInfo &event_info); // Add a new notification for an event
|
|
||||||
void remove(U32 event_id);
|
void remove(U32 event_id);
|
||||||
|
|
||||||
BOOL hasNotification(const U32 event_id);
|
BOOL hasNotification(const U32 event_id);
|
||||||
|
void serverPushRequest(U32 event_id, bool add);
|
||||||
|
|
||||||
typedef std::map<U32, LLEventNotification *> en_map;
|
typedef std::map<U32, LLEventNotification *> en_map;
|
||||||
|
bool handleResponse(U32 eventId, LLVector3d eventPos, const LLSD& notification, const LLSD& response);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
en_map mEventNotifications;
|
en_map mEventNotifications;
|
||||||
@@ -78,7 +82,6 @@ public:
|
|||||||
time_t getEventDate() const { return mEventDate; }
|
time_t getEventDate() const { return mEventDate; }
|
||||||
const std::string &getEventDateStr() const { return mEventDateStr; }
|
const std::string &getEventDateStr() const { return mEventDateStr; }
|
||||||
LLVector3d getEventPosGlobal() const { return mEventPosGlobal; }
|
LLVector3d getEventPosGlobal() const { return mEventPosGlobal; }
|
||||||
bool handleResponse(const LLSD& notification, const LLSD& payload);
|
|
||||||
protected:
|
protected:
|
||||||
U32 mEventID; // EventID for this event
|
U32 mEventID; // EventID for this event
|
||||||
std::string mEventName;
|
std::string mEventName;
|
||||||
|
|||||||
@@ -114,25 +114,10 @@ void LLPanelEvent::setEventID(const U32 event_id)
|
|||||||
|
|
||||||
if (event_id != 0)
|
if (event_id != 0)
|
||||||
{
|
{
|
||||||
sendEventInfoRequest();
|
gEventNotifier.add(event_id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void LLPanelEvent::sendEventInfoRequest()
|
|
||||||
{
|
|
||||||
LLMessageSystem *msg = gMessageSystem;
|
|
||||||
|
|
||||||
msg->newMessageFast(_PREHASH_EventInfoRequest);
|
|
||||||
msg->nextBlockFast(_PREHASH_AgentData);
|
|
||||||
msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
|
|
||||||
msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID() );
|
|
||||||
msg->nextBlockFast(_PREHASH_EventData);
|
|
||||||
msg->addU32Fast(_PREHASH_EventID, mEventID);
|
|
||||||
gAgent.sendReliableMessage();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//static
|
//static
|
||||||
void LLPanelEvent::processEventInfoReply(LLMessageSystem *msg, void **)
|
void LLPanelEvent::processEventInfoReply(LLMessageSystem *msg, void **)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user