Add setFeaturesReceivedCallback for when SimulatorFeatures cap is received
This commit is contained in:
@@ -308,6 +308,7 @@ LLViewerRegion::LLViewerRegion(const U64 &handle,
|
|||||||
mCacheDirty(FALSE),
|
mCacheDirty(FALSE),
|
||||||
mReleaseNotesRequested(FALSE),
|
mReleaseNotesRequested(FALSE),
|
||||||
mCapabilitiesReceived(false),
|
mCapabilitiesReceived(false),
|
||||||
|
mFeaturesReceived(false),
|
||||||
mGamingFlags(0)
|
mGamingFlags(0)
|
||||||
{
|
{
|
||||||
mWidth = region_width_meters;
|
mWidth = region_width_meters;
|
||||||
@@ -1250,6 +1251,10 @@ void LLViewerRegion::setSimulatorFeatures(const LLSD& sim_features)
|
|||||||
LLSDSerialize::toPrettyXML(sim_features, str);
|
LLSDSerialize::toPrettyXML(sim_features, str);
|
||||||
llinfos << str.str() << llendl;
|
llinfos << str.str() << llendl;
|
||||||
mSimulatorFeatures = sim_features;
|
mSimulatorFeatures = sim_features;
|
||||||
|
|
||||||
|
mFeaturesReceived = true;
|
||||||
|
mFeaturesReceivedSignal(getRegionID());
|
||||||
|
mFeaturesReceivedSignal.disconnect_all_slots();
|
||||||
}
|
}
|
||||||
|
|
||||||
void LLViewerRegion::setGamingData(const LLSD& gaming_data)
|
void LLViewerRegion::setGamingData(const LLSD& gaming_data)
|
||||||
@@ -1872,6 +1877,9 @@ void LLViewerRegion::setCapability(const std::string& name, const std::string& u
|
|||||||
}
|
}
|
||||||
else if (name == "SimulatorFeatures")
|
else if (name == "SimulatorFeatures")
|
||||||
{
|
{
|
||||||
|
// although this is not needed later, add it so we can check if the sim supports it at all later
|
||||||
|
mImpl->mCapabilities[name] = url;
|
||||||
|
|
||||||
// kick off a request for simulator features
|
// kick off a request for simulator features
|
||||||
LLHTTPClient::get(url, new SimulatorFeaturesReceived(url, getHandle()));
|
LLHTTPClient::get(url, new SimulatorFeaturesReceived(url, getHandle()));
|
||||||
}
|
}
|
||||||
@@ -1929,6 +1937,15 @@ void LLViewerRegion::setCapabilitiesReceived(bool received)
|
|||||||
|
|
||||||
// This is a single-shot signal. Forget callbacks to save resources.
|
// This is a single-shot signal. Forget callbacks to save resources.
|
||||||
mCapabilitiesReceivedSignal.disconnect_all_slots();
|
mCapabilitiesReceivedSignal.disconnect_all_slots();
|
||||||
|
|
||||||
|
// If we don't have this cap, send the changed signal to simplify code
|
||||||
|
// in consumers by allowing them to expect this signal, regardless.
|
||||||
|
if (getCapability("SimulatorFeatures").empty())
|
||||||
|
{
|
||||||
|
mFeaturesReceived = true;
|
||||||
|
mFeaturesReceivedSignal(getRegionID());
|
||||||
|
mFeaturesReceivedSignal.disconnect_all_slots();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2046,3 +2063,8 @@ bool LLViewerRegion::dynamicPathfindingEnabled() const
|
|||||||
mSimulatorFeatures["DynamicPathfindingEnabled"].asBoolean());
|
mSimulatorFeatures["DynamicPathfindingEnabled"].asBoolean());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boost::signals2::connection LLViewerRegion::setFeaturesReceivedCallback(const features_received_signal_t::slot_type& cb)
|
||||||
|
{
|
||||||
|
return mFeaturesReceivedSignal.connect(cb);
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -100,6 +100,7 @@ public:
|
|||||||
} eObjectPartitions;
|
} eObjectPartitions;
|
||||||
|
|
||||||
typedef boost::signals2::signal<void(const LLUUID& region_id)> caps_received_signal_t;
|
typedef boost::signals2::signal<void(const LLUUID& region_id)> caps_received_signal_t;
|
||||||
|
typedef boost::signals2::signal<void(const LLUUID& region_id)> features_received_signal_t;
|
||||||
|
|
||||||
LLViewerRegion(const U64 &handle,
|
LLViewerRegion(const U64 &handle,
|
||||||
const LLHost &host,
|
const LLHost &host,
|
||||||
@@ -262,6 +263,9 @@ public:
|
|||||||
static bool isSpecialCapabilityName(const std::string &name);
|
static bool isSpecialCapabilityName(const std::string &name);
|
||||||
void logActiveCapabilities() const;
|
void logActiveCapabilities() const;
|
||||||
|
|
||||||
|
boost::signals2::connection setFeaturesReceivedCallback(const features_received_signal_t::slot_type& cb);
|
||||||
|
bool getFeaturesReceived() const { return mFeaturesReceived; }
|
||||||
|
|
||||||
/// Get LLEventPump on which we listen for capability requests
|
/// Get LLEventPump on which we listen for capability requests
|
||||||
/// (https://wiki.lindenlab.com/wiki/Viewer:Messaging/Messaging_Notes#Capabilities)
|
/// (https://wiki.lindenlab.com/wiki/Viewer:Messaging/Messaging_Notes#Capabilities)
|
||||||
LLEventPump& getCapAPI() const;
|
LLEventPump& getCapAPI() const;
|
||||||
@@ -442,7 +446,9 @@ private:
|
|||||||
|
|
||||||
bool mAlive; // can become false if circuit disconnects
|
bool mAlive; // can become false if circuit disconnects
|
||||||
bool mCapabilitiesReceived;
|
bool mCapabilitiesReceived;
|
||||||
|
bool mFeaturesReceived;
|
||||||
caps_received_signal_t mCapabilitiesReceivedSignal;
|
caps_received_signal_t mCapabilitiesReceivedSignal;
|
||||||
|
features_received_signal_t mFeaturesReceivedSignal;
|
||||||
|
|
||||||
BOOL mReleaseNotesRequested;
|
BOOL mReleaseNotesRequested;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user