diff options
Diffstat (limited to 'indra/newview/llattachmentsmgr.h')
| -rw-r--r-- | indra/newview/llattachmentsmgr.h | 264 | 
1 files changed, 132 insertions, 132 deletions
diff --git a/indra/newview/llattachmentsmgr.h b/indra/newview/llattachmentsmgr.h index c6b9f4e215..630b10030d 100644 --- a/indra/newview/llattachmentsmgr.h +++ b/indra/newview/llattachmentsmgr.h @@ -1,132 +1,132 @@ -/**  - * @file llattachmentsmgr.h - * @brief Batches up attachment requests and sends them all - * in one message. - * - * $LicenseInfo:firstyear=2004&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. - *  - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - *  - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU - * Lesser General Public License for more details. - *  - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA - *  - * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA - * $/LicenseInfo$ - */ - -#ifndef LL_LLATTACHMENTSMGR_H -#define LL_LLATTACHMENTSMGR_H - -#include "llsingleton.h" - -//-------------------------------------------------------------------------------- -// LLAttachmentsMgr -//  -// This class manages batching up of requests at two stages of -// attachment rezzing. -// -// First, attachments requested to rez get saved in -// mPendingAttachments and sent as a single -// RezMultipleAttachmentsFromInv request. This batching is needed -// mainly because of weaknessing the UI element->inventory item -// handling, such that we don't always know when we are requesting -// multiple items. Now they just pile up and get swept into a single -// request during the idle loop. -// -// Second, after attachments arrive, we need to generate COF links for -// them. There are both efficiency and UI correctness reasons why it -// is better to request all the COF links at once and run a single -// callback after they all complete. Given the vagaries of the -// attachment system, there is no guarantee that we will get all the -// attachments we ask for, but we frequently do. So in the common case -// that all the desired attachments arrive fairly quickly, we generate -// a single batched request for COF links. If attachments arrive late -// or not at all, we will still issue COF link requests once a timeout -// value has been exceeded. -// -// To handle attachments that never arrive, we forget about requests -// that exceed a timeout value. -//-------------------------------------------------------------------------------- -class LLAttachmentsMgr: public LLSingleton<LLAttachmentsMgr> -{ -    LLSINGLETON(LLAttachmentsMgr); -	virtual ~LLAttachmentsMgr(); - -public: -    // Stores info for attachments that will be requested during idle. -	struct AttachmentsInfo -	{ -		LLUUID mItemID; -		U8 mAttachmentPt; -		bool mAdd; -	}; -	typedef std::deque<AttachmentsInfo> attachments_vec_t; - -	void addAttachmentRequest(const LLUUID& item_id, -                              const U8 attachment_pt, -                              const bool add); -    void onAttachmentRequested(const LLUUID& item_id); -	void requestAttachments(attachments_vec_t& attachment_requests); -	static void onIdle(void *); - -    void onAttachmentArrived(const LLUUID& inv_item_id); - -    void onDetachRequested(const LLUUID& inv_item_id); -    void onDetachCompleted(const LLUUID& inv_item_id); - -    bool isAttachmentStateComplete() const; - -private: - -    class LLItemRequestTimes: public std::map<LLUUID,LLTimer> -    { -    public: -        LLItemRequestTimes(const std::string& op_name, F32 timeout); -        void addTime(const LLUUID& inv_item_id); -        void removeTime(const LLUUID& inv_item_id); -        bool wasRequestedRecently(const LLUUID& item_id) const; -        bool getTime(const LLUUID& inv_item_id, LLTimer& timer) const; - -    private: -        F32 mTimeout; -        std::string mOpName; -    }; - -	void removeAttachmentRequestTime(const LLUUID& inv_item_id); -	void onIdle(); -	void requestPendingAttachments(); -	void linkRecentlyArrivedAttachments(); -    void expireOldAttachmentRequests(); -    void expireOldDetachRequests(); -    void checkInvalidCOFLinks(); -    void spamStatusInfo(); - -    // Attachments that we are planning to rez but haven't requested from the server yet. -	attachments_vec_t mPendingAttachments; - -	// Attachments that have been requested from server but have not arrived yet. -	LLItemRequestTimes mAttachmentRequests; - -    // Attachments that have been requested to detach but have not gone away yet. -	LLItemRequestTimes mDetachRequests; - -    // Attachments that have arrived but have not been linked in the COF yet. -    std::set<LLUUID> mRecentlyArrivedAttachments; -    LLTimer mCOFLinkBatchTimer; - -    // Attachments that are linked in the COF but may be invalid. -	LLItemRequestTimes mQuestionableCOFLinks; -}; - -#endif +/**
 + * @file llattachmentsmgr.h
 + * @brief Batches up attachment requests and sends them all
 + * in one message.
 + *
 + * $LicenseInfo:firstyear=2004&license=viewerlgpl$
 + * Second Life Viewer Source Code
 + * Copyright (C) 2010, Linden Research, Inc.
 + *
 + * This library is free software; you can redistribute it and/or
 + * modify it under the terms of the GNU Lesser General Public
 + * License as published by the Free Software Foundation;
 + * version 2.1 of the License only.
 + *
 + * This library is distributed in the hope that it will be useful,
 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 + * Lesser General Public License for more details.
 + *
 + * You should have received a copy of the GNU Lesser General Public
 + * License along with this library; if not, write to the Free Software
 + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 + *
 + * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
 + * $/LicenseInfo$
 + */
 +
 +#ifndef LL_LLATTACHMENTSMGR_H
 +#define LL_LLATTACHMENTSMGR_H
 +
 +#include "llsingleton.h"
 +
 +//--------------------------------------------------------------------------------
 +// LLAttachmentsMgr
 +//
 +// This class manages batching up of requests at two stages of
 +// attachment rezzing.
 +//
 +// First, attachments requested to rez get saved in
 +// mPendingAttachments and sent as a single
 +// RezMultipleAttachmentsFromInv request. This batching is needed
 +// mainly because of weaknessing the UI element->inventory item
 +// handling, such that we don't always know when we are requesting
 +// multiple items. Now they just pile up and get swept into a single
 +// request during the idle loop.
 +//
 +// Second, after attachments arrive, we need to generate COF links for
 +// them. There are both efficiency and UI correctness reasons why it
 +// is better to request all the COF links at once and run a single
 +// callback after they all complete. Given the vagaries of the
 +// attachment system, there is no guarantee that we will get all the
 +// attachments we ask for, but we frequently do. So in the common case
 +// that all the desired attachments arrive fairly quickly, we generate
 +// a single batched request for COF links. If attachments arrive late
 +// or not at all, we will still issue COF link requests once a timeout
 +// value has been exceeded.
 +//
 +// To handle attachments that never arrive, we forget about requests
 +// that exceed a timeout value.
 +//--------------------------------------------------------------------------------
 +class LLAttachmentsMgr: public LLSingleton<LLAttachmentsMgr>
 +{
 +    LLSINGLETON(LLAttachmentsMgr);
 +    virtual ~LLAttachmentsMgr();
 +
 +public:
 +    // Stores info for attachments that will be requested during idle.
 +    struct AttachmentsInfo
 +    {
 +        LLUUID mItemID;
 +        U8 mAttachmentPt;
 +        bool mAdd;
 +    };
 +    typedef std::deque<AttachmentsInfo> attachments_vec_t;
 +
 +    void addAttachmentRequest(const LLUUID& item_id,
 +                              const U8 attachment_pt,
 +                              const bool add);
 +    void onAttachmentRequested(const LLUUID& item_id);
 +    void requestAttachments(attachments_vec_t& attachment_requests);
 +    static void onIdle(void *);
 +
 +    void onAttachmentArrived(const LLUUID& inv_item_id);
 +
 +    void onDetachRequested(const LLUUID& inv_item_id);
 +    void onDetachCompleted(const LLUUID& inv_item_id);
 +
 +    bool isAttachmentStateComplete() const;
 +
 +private:
 +
 +    class LLItemRequestTimes: public std::map<LLUUID,LLTimer>
 +    {
 +    public:
 +        LLItemRequestTimes(const std::string& op_name, F32 timeout);
 +        void addTime(const LLUUID& inv_item_id);
 +        void removeTime(const LLUUID& inv_item_id);
 +        bool wasRequestedRecently(const LLUUID& item_id) const;
 +        bool getTime(const LLUUID& inv_item_id, LLTimer& timer) const;
 +
 +    private:
 +        F32 mTimeout;
 +        std::string mOpName;
 +    };
 +
 +    void removeAttachmentRequestTime(const LLUUID& inv_item_id);
 +    void onIdle();
 +    void requestPendingAttachments();
 +    void linkRecentlyArrivedAttachments();
 +    void expireOldAttachmentRequests();
 +    void expireOldDetachRequests();
 +    void checkInvalidCOFLinks();
 +    void spamStatusInfo();
 +
 +    // Attachments that we are planning to rez but haven't requested from the server yet.
 +    attachments_vec_t mPendingAttachments;
 +
 +    // Attachments that have been requested from server but have not arrived yet.
 +    LLItemRequestTimes mAttachmentRequests;
 +
 +    // Attachments that have been requested to detach but have not gone away yet.
 +    LLItemRequestTimes mDetachRequests;
 +
 +    // Attachments that have arrived but have not been linked in the COF yet.
 +    std::set<LLUUID> mRecentlyArrivedAttachments;
 +    LLTimer mCOFLinkBatchTimer;
 +
 +    // Attachments that are linked in the COF but may be invalid.
 +    LLItemRequestTimes mQuestionableCOFLinks;
 +};
 +
 +#endif
  | 
