1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
|
/**
* @file llestateinfomodel.h
* @brief Estate info model
*
* $LicenseInfo:firstyear=2011&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2011, 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_LLESTATEINFOMODEL_H
#define LL_LLESTATEINFOMODEL_H
class LLMessageSystem;
#include "llsingleton.h"
#include "llcoros.h"
#include "lleventcoro.h"
#include "lldispatcher.h"
#include "llregionflags.h"
class LLViewerRegion;
/**
* Contains estate info, notifies interested parties of its changes.
*/
class LLEstateInfoModel : public LLSingleton<LLEstateInfoModel>
{
LLSINGLETON_C11(LLEstateInfoModel);
LOG_CLASS(LLEstateInfoModel);
public:
typedef std::vector<std::string> strings_t;
typedef boost::signals2::signal<void()> update_signal_t;
typedef boost::signals2::signal<void(U32)> update_flaged_signal_t;
typedef boost::signals2::connection connection_t;
connection_t setUpdateCallback(const update_signal_t::slot_type& cb); /// the model has been externally updated
connection_t setUpdateAccessCallback(const update_flaged_signal_t::slot_type& cb);
connection_t setUpdateExperienceCallback(const update_signal_t::slot_type& cb);
connection_t setCommitCallback(const update_signal_t::slot_type& cb); /// our changes have been applied
void setRegion(LLViewerRegion* region);
void clearRegion();
void sendEstateInfo(); /// send estate info to the simulator
// getters
bool getUseFixedSun() const { return getFlag(REGION_FLAGS_SUN_FIXED); }
bool getIsExternallyVisible() const { return getFlag(REGION_FLAGS_EXTERNALLY_VISIBLE); }
bool getAllowDirectTeleport() const { return getFlag(REGION_FLAGS_ALLOW_DIRECT_TELEPORT); }
bool getDenyAnonymous() const { return getFlag(REGION_FLAGS_DENY_ANONYMOUS); }
bool getDenyAgeUnverified() const { return getFlag(REGION_FLAGS_DENY_AGEUNVERIFIED); }
bool getAllowVoiceChat() const { return getFlag(REGION_FLAGS_ALLOW_VOICE); }
bool getAllowAccessOverride() const { return getFlag(REGION_FLAGS_ALLOW_ACCESS_OVERRIDE); }
bool getAllowEnvironmentOverride() const { return getFlag(REGION_FLAGS_ALLOW_ENVIRONMENT_OVERRIDE); }
const std::string& getName() const { return mName; }
const LLUUID& getOwnerID() const { return mOwnerID; }
U32 getID() const { return mID; }
F32 getSunHour() const { return getUseFixedSun() ? mSunHour : 0.f; }
// setters
void setUseFixedSun(bool val) { setFlag(REGION_FLAGS_SUN_FIXED, val); }
void setIsExternallyVisible(bool val) { setFlag(REGION_FLAGS_EXTERNALLY_VISIBLE, val); }
void setAllowDirectTeleport(bool val) { setFlag(REGION_FLAGS_ALLOW_DIRECT_TELEPORT, val); }
void setDenyAnonymous(bool val) { setFlag(REGION_FLAGS_DENY_ANONYMOUS, val); }
void setDenyAgeUnverified(bool val) { setFlag(REGION_FLAGS_DENY_AGEUNVERIFIED, val); }
void setAllowVoiceChat(bool val) { setFlag(REGION_FLAGS_ALLOW_VOICE, val); }
void setAllowAccessOverride(bool val) { setFlag(REGION_FLAGS_ALLOW_ACCESS_OVERRIDE, val); }
void setAllowEnvironmentOverride(bool val) { setFlag(REGION_FLAGS_ALLOW_ENVIRONMENT_OVERRIDE, val); }
void setSunHour(F32 sun_hour) { mSunHour = sun_hour; }
const uuid_set_t & getAllowedAgents() const { return mAllowedAgents; }
const uuid_set_t & getAllowedGroups() const { return mAllowedGroups; }
const uuid_set_t & getBannedAgents() const { return mBannedAgents; }
const uuid_set_t & getEstateManagers() const { return mEstateManagers; }
const uuid_set_t & getAllowedExperiences() const { return mExperienceAllowed; }
const uuid_set_t & getTrustedExperiences() const { return mExperienceTrusted; }
const uuid_set_t & getBlockedExperiences() const { return mExperienceBlocked; }
void sendEstateOwnerMessage(const std::string& request, const strings_t& strings);
//---------------------------------------------------------------------
/// refresh model with data from the incoming server message
void updateEstateInfo(const strings_t& strings);
void updateAccessInfo(const strings_t& strings);
void updateExperienceInfo(const strings_t& strings);
const LLUUID & getLastInvoice() { return mRequestInvoice; }
const LLUUID & nextInvoice() { mRequestInvoice.generate(); return mRequestInvoice; }
protected:
void notifyCommit();
virtual void initSingleton() override;
private:
bool commitEstateInfoCaps();
void commitEstateInfoDataserver();
inline bool getFlag(U64 flag) const;
inline void setFlag(U64 flag, bool val);
U64 getFlags() const { return mFlags; }
std::string getInfoDump();
// estate info
std::string mName; /// estate name
LLUUID mOwnerID; /// estate owner id
U32 mID; /// estate id
U64 mFlags; /// estate flags
F32 mSunHour; /// estate sun hour
uuid_set_t mAllowedAgents;
uuid_set_t mAllowedGroups;
uuid_set_t mBannedAgents;
uuid_set_t mEstateManagers;
uuid_set_t mExperienceAllowed;
uuid_set_t mExperienceTrusted;
uuid_set_t mExperienceBlocked;
update_signal_t mUpdateSignal; /// emitted when we receive update from sim
update_flaged_signal_t mUpdateAccess;
update_signal_t mUpdateExperience;
update_signal_t mCommitSignal; /// emitted when our update gets applied to sim
LLDispatcher mDispatch;
LLUUID mRequestInvoice;
LLViewerRegion* mRegion;
void commitEstateInfoCapsCoro(std::string url);
static void processEstateOwnerRequest(LLMessageSystem* msg, void**);
};
inline bool LLEstateInfoModel::getFlag(U64 flag) const
{
return ((mFlags & flag) != 0);
}
inline void LLEstateInfoModel::setFlag(U64 flag, bool val)
{
if (val)
{
mFlags |= flag;
}
else
{
mFlags &= ~flag;
}
}
#endif // LL_LLESTATEINFOMODEL_H
|