llcallingcard.h
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:9k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llcallingcard.h
  3.  * @brief Definition of the LLPreviewCallingCard class
  4.  *
  5.  * $LicenseInfo:firstyear=2002&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2002-2010, Linden Research, Inc.
  8.  * 
  9.  * Second Life Viewer Source Code
  10.  * The source code in this file ("Source Code") is provided by Linden Lab
  11.  * to you under the terms of the GNU General Public License, version 2.0
  12.  * ("GPL"), unless you have obtained a separate licensing agreement
  13.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  14.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  15.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  16.  * 
  17.  * There are special exceptions to the terms and conditions of the GPL as
  18.  * it is applied to this Source Code. View the full text of the exception
  19.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  20.  * online at
  21.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  22.  * 
  23.  * By copying, modifying or distributing this software, you acknowledge
  24.  * that you have read and understood your obligations described above,
  25.  * and agree to abide by those obligations.
  26.  * 
  27.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  28.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  29.  * COMPLETENESS OR PERFORMANCE.
  30.  * $/LicenseInfo$
  31.  */
  32. #ifndef LL_LLCALLINGCARD_H
  33. #define LL_LLCALLINGCARD_H
  34. #include <map>
  35. #include <set>
  36. #include <string>
  37. #include <vector>
  38. #include "lluserrelations.h"
  39. #include "lluuid.h"
  40. #include "v3dmath.h"
  41. //class LLInventoryModel;
  42. //class LLInventoryObserver;
  43. class LLMessageSystem;
  44. class LLTrackingData;
  45. class LLFriendObserver
  46. {
  47. public:
  48. // This enumeration is a way to refer to what changed in a more
  49. // human readable format. You can mask the value provided by
  50. // chaged() to see if the observer is interested in the change.
  51. enum 
  52. {
  53. NONE = 0,
  54. ADD = 1,
  55. REMOVE = 2,
  56. ONLINE = 4,
  57. POWERS = 8,
  58. ALL = 0xffffffff
  59. };
  60. virtual ~LLFriendObserver() {}
  61. virtual void changed(U32 mask) = 0;
  62. };
  63. /*
  64. struct LLBuddyInfo
  65. {
  66. bool mIsOnline;
  67. bool mIsEmpowered;
  68. LLBuddyInfo() : mIsOnline(false), mIsEmpowered(false) {}
  69. };
  70. */
  71. // This is used as a base class for doing operations on all buddies.
  72. class LLRelationshipFunctor
  73. {
  74. public:
  75. virtual ~LLRelationshipFunctor() {}
  76. virtual bool operator()(const LLUUID& buddy_id, LLRelationship* buddy) = 0;
  77. };
  78. class LLAvatarTracker
  79. {
  80. public:
  81. static LLAvatarTracker& instance() { return sInstance; }
  82. void track(const LLUUID& avatar_id, const std::string& name);
  83. void untrack(const LLUUID& avatar_id);
  84. bool isTrackedAgentValid() { return mTrackedAgentValid; }
  85. void setTrackedAgentValid(bool valid) { mTrackedAgentValid = valid; }
  86. void findAgent();
  87. // coarse update information
  88. void setTrackedCoarseLocation(const LLVector3d& global_pos);
  89. // dealing with the tracked agent location
  90. bool haveTrackingInfo();
  91. void getDegreesAndDist(F32& rot, F64& horiz_dist, F64& vert_dist);
  92. LLVector3d getGlobalPos();
  93. // Get the name passed in, returns null string if uninitialized.
  94. const std::string& getName();
  95. // Get the avatar being tracked, returns LLUUID::null if uninitialized
  96. const LLUUID& getAvatarID();
  97. // Deal with inventory
  98. //void observe(LLInventoryModel* model);
  99. //void inventoryChanged();
  100. // add or remove agents from buddy list. Each method takes a set
  101. // of buddies and returns how many were actually added or removed.
  102. typedef std::map<LLUUID, LLRelationship*> buddy_map_t;
  103. S32 addBuddyList(const buddy_map_t& buddies);
  104. //S32 removeBuddyList(const buddy_list_t& exes);
  105. void copyBuddyList(buddy_map_t& buddies) const;
  106. // deal with termination of friendhsip
  107. void terminateBuddy(const LLUUID& id);
  108. // get full info
  109. const LLRelationship* getBuddyInfo(const LLUUID& id) const;
  110. // Is this person a friend/buddy/calling card holder?
  111. bool isBuddy(const LLUUID& id) const;
  112. // online status
  113. void setBuddyOnline(const LLUUID& id, bool is_online);
  114. bool isBuddyOnline(const LLUUID& id) const;
  115. // simple empowered status
  116. void setBuddyEmpowered(const LLUUID& id, bool is_empowered);
  117. bool isBuddyEmpowered(const LLUUID& id) const;
  118. // set the empower bit & message the server.
  119. void empowerList(const buddy_map_t& list, bool grant);
  120. void empower(const LLUUID& id, bool grant); // wrapper for above
  121. // register callbacks
  122. void registerCallbacks(LLMessageSystem* msg);
  123. // Add/remove an observer. If the observer is destroyed, be sure
  124. // to remove it. On destruction of the tracker, it will delete any
  125. // observers left behind.
  126. void addObserver(LLFriendObserver* observer);
  127. void removeObserver(LLFriendObserver* observer);
  128. void notifyObservers();
  129. // Observers interested in updates of a particular avatar.
  130. // On destruction these observers are NOT deleted.
  131. void addParticularFriendObserver(const LLUUID& buddy_id, LLFriendObserver* observer);
  132. void removeParticularFriendObserver(const LLUUID& buddy_id, LLFriendObserver* observer);
  133. void notifyParticularFriendObservers(const LLUUID& buddy_id);
  134. /**
  135.  * Stores flag for change and id of object change applies to
  136.  *
  137.  * This allows outsiders to tell the AvatarTracker if something has
  138.  * been changed 'under the hood',
  139.  * and next notification will have exact avatar IDs have been changed.
  140.  */
  141. void addChangedMask(U32 mask, const LLUUID& referent);
  142. const std::set<LLUUID>& getChangedIDs() { return mChangedBuddyIDs; }
  143. // Apply the functor to every buddy. Do not actually modify the
  144. // buddy list in the functor or bad things will happen.
  145. void applyFunctor(LLRelationshipFunctor& f);
  146. static void formFriendship(const LLUUID& friend_id);
  147. protected:
  148. void deleteTrackingData();
  149. void agentFound(const LLUUID& prey,
  150. const LLVector3d& estimated_global_pos);
  151. // Message system functionality
  152. static void processAgentFound(LLMessageSystem* msg, void**);
  153. static void processOnlineNotification(LLMessageSystem* msg, void**);
  154. static void processOfflineNotification(LLMessageSystem* msg, void**);
  155. //static void processGrantedProxies(LLMessageSystem* msg, void**);
  156. static void processTerminateFriendship(LLMessageSystem* msg, void**);
  157. static void processChangeUserRights(LLMessageSystem* msg, void**);
  158. void processNotify(LLMessageSystem* msg, bool online);
  159. void processChange(LLMessageSystem* msg);
  160. protected:
  161. static LLAvatarTracker sInstance;
  162. LLTrackingData* mTrackingData;
  163. bool mTrackedAgentValid;
  164. U32 mModifyMask;
  165. //LLInventoryModel* mInventory;
  166. //LLInventoryObserver* mInventoryObserver;
  167. buddy_map_t mBuddyInfo;
  168. typedef std::set<LLUUID> changed_buddy_t;
  169. changed_buddy_t mChangedBuddyIDs;
  170. typedef std::vector<LLFriendObserver*> observer_list_t;
  171. observer_list_t mObservers;
  172.     typedef std::set<LLFriendObserver*> observer_set_t;
  173.     typedef std::map<LLUUID, observer_set_t> observer_map_t;
  174.     observer_map_t mParticularFriendObserverMap;
  175. private:
  176. // do not implement
  177. LLAvatarTracker(const LLAvatarTracker&);
  178. bool operator==(const LLAvatarTracker&);
  179. public:
  180. // don't you dare create or delete this object
  181. LLAvatarTracker();
  182. ~LLAvatarTracker();
  183. };
  184. // collect set of LLUUIDs we're a proxy for
  185. class LLCollectProxyBuddies : public LLRelationshipFunctor
  186. {
  187. public:
  188. LLCollectProxyBuddies() {}
  189. virtual ~LLCollectProxyBuddies() {}
  190. virtual bool operator()(const LLUUID& buddy_id, LLRelationship* buddy);
  191. typedef std::set<LLUUID> buddy_list_t;
  192. buddy_list_t mProxy;
  193. };
  194. // collect dictionary sorted map of name -> agent_id for every online buddy
  195. class LLCollectMappableBuddies : public LLRelationshipFunctor
  196. {
  197. public:
  198. LLCollectMappableBuddies() {}
  199. virtual ~LLCollectMappableBuddies() {}
  200. virtual bool operator()(const LLUUID& buddy_id, LLRelationship* buddy);
  201. typedef std::map<std::string, LLUUID, LLDictionaryLess> buddy_map_t;
  202. buddy_map_t mMappable;
  203. std::string mFirst;
  204. std::string mLast;
  205. };
  206. // collect dictionary sorted map of name -> agent_id for every online buddy
  207. class LLCollectOnlineBuddies : public LLRelationshipFunctor
  208. {
  209. public:
  210. LLCollectOnlineBuddies() {}
  211. virtual ~LLCollectOnlineBuddies() {}
  212. virtual bool operator()(const LLUUID& buddy_id, LLRelationship* buddy);
  213. typedef std::map<std::string, LLUUID, LLDictionaryLess> buddy_map_t;
  214. buddy_map_t mOnline;
  215. std::string mFirst;
  216. std::string mLast;
  217. };
  218. // collect dictionary sorted map of name -> agent_id for every buddy,
  219. // one map is offline and the other map is online.
  220. class LLCollectAllBuddies : public LLRelationshipFunctor
  221. {
  222. public:
  223. LLCollectAllBuddies() {}
  224. virtual ~LLCollectAllBuddies() {}
  225. virtual bool operator()(const LLUUID& buddy_id, LLRelationship* buddy);
  226. typedef std::map<std::string, LLUUID, LLDictionaryLess> buddy_map_t;
  227. buddy_map_t mOnline;
  228. buddy_map_t mOffline;
  229. std::string mFirst;
  230. std::string mLast;
  231. };
  232. #endif // LL_LLCALLINGCARD_H