MAINT-5976: Adding MailDrop type event Queue

meow-7.2.2
rider 2015-12-17 09:06:19 -08:00
parent f4b6a89ab0
commit 83c9c6df07
2 changed files with 64 additions and 4 deletions

View File

@ -507,6 +507,37 @@ bool LLEventStream::post(const LLSD& event)
return (*signal)(event);
}
/*****************************************************************************
* LLEventMailDrop
*****************************************************************************/
bool LLEventMailDrop::post(const LLSD& event)
{
bool posted = LLEventPump::post(event);
if (!posted)
{
mEventHistory.push_back(event);
}
return posted;
}
LLBoundListener LLEventMailDrop::listen_impl(const std::string& name,
const LLEventListener& listener,
const NameList& after,
const NameList& before)
{
LLBoundListener bndlistener = LLEventPump::listen_impl(name, listener, after, before);
return bndlistener;
}
// typedef std::list<LLSD> EventList;
// EventList mEventHistory;
/*****************************************************************************
* LLEventQueue
*****************************************************************************/

View File

@ -554,12 +554,13 @@ private:
virtual void reset();
private:
virtual LLBoundListener listen_impl(const std::string& name, const LLEventListener&,
const NameList& after,
const NameList& before);
std::string mName;
protected:
virtual LLBoundListener listen_impl(const std::string& name, const LLEventListener&,
const NameList& after,
const NameList& before);
/// implement the dispatching
boost::shared_ptr<LLStandardSignal> mSignal;
@ -597,11 +598,39 @@ public:
virtual bool post(const LLSD& event);
};
/*****************************************************************************
* LLEventMailDrop
*****************************************************************************/
/**
* LLEventMailDrop is a specialization of LLEventStream. Events are posted normally,
* however if no listeners return that they have handled the event it is placed in
* a list. Subsequent attaching listeners will recieve stored events until a
* listener indicates that the event has been handled.
*/
class LL_COMMON_API LLEventMailDrop: public LLEventPump
{
public:
LLEventMailDrop(const std::string& name, bool tweak=false): LLEventPump(name, tweak) {}
virtual ~LLEventMailDrop() {}
/// Post an event to all listeners
virtual bool post(const LLSD& event);
protected:
virtual LLBoundListener listen_impl(const std::string& name, const LLEventListener&,
const NameList& after,
const NameList& before);
private:
typedef std::list<LLSD> EventList;
EventList mEventHistory;
};
/*****************************************************************************
* LLEventQueue
*****************************************************************************/
/**
* LLEventQueue isa LLEventPump whose post() method defers calling registered
* LLEventQueue is a LLEventPump whose post() method defers calling registered
* listeners until flush() is called.
*/
class LL_COMMON_API LLEventQueue: public LLEventPump