Add setFeaturesReceivedCallback for when SimulatorFeatures cap is received

This commit is contained in:
Lirusaito
2013-02-13 03:04:29 -05:00
parent 43bb5d6e39
commit c7fcaa8e5b
2 changed files with 28 additions and 0 deletions

View File

@@ -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);
}

View File

@@ -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;