From 83c9c6df07ab602bdbd2487e587956d0e67993e2 Mon Sep 17 00:00:00 2001 From: rider Date: Thu, 17 Dec 2015 09:06:19 -0800 Subject: MAINT-5976: Adding MailDrop type event Queue --- indra/llcommon/llevents.cpp | 31 +++++++++++++++++++++++++++++++ indra/llcommon/llevents.h | 37 +++++++++++++++++++++++++++++++++---- 2 files changed, 64 insertions(+), 4 deletions(-) (limited to 'indra') diff --git a/indra/llcommon/llevents.cpp b/indra/llcommon/llevents.cpp index bb3a137815..080830a134 100755 --- a/indra/llcommon/llevents.cpp +++ b/indra/llcommon/llevents.cpp @@ -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 EventList; +// EventList mEventHistory; + + + + /***************************************************************************** * LLEventQueue *****************************************************************************/ diff --git a/indra/llcommon/llevents.h b/indra/llcommon/llevents.h index 8d4fa68350..b07db889c0 100755 --- a/indra/llcommon/llevents.h +++ b/indra/llcommon/llevents.h @@ -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 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 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 -- cgit v1.2.3