Refactor authority checks a bit.

This commit is contained in:
Gunnar Beutner 2013-09-12 10:17:14 +02:00
parent 95909d82fe
commit 3b1b9d1274
2 changed files with 18 additions and 5 deletions

View File

@ -458,8 +458,8 @@ void ClusterComponent::ClusterTimerHandler(void)
/* Eww. */
Dictionary::Ptr features = boost::make_shared<Dictionary>();
features->Set("checker", DynamicType::GetByName("CheckerComponent") ? 1 : 0);
features->Set("notification", DynamicType::GetByName("NotificationComponent") ? 1 : 0);
features->Set("checker", SupportsChecks() ? 1 : 0);
features->Set("notification", SupportsNotifications() ? 1 : 0);
params->Set("features", features);
Dictionary::Ptr message = boost::make_shared<Dictionary>();
@ -1126,14 +1126,14 @@ void ClusterComponent::CheckAuthorityHandler(const DynamicObject::Ptr& object, c
Array::Ptr authorities = object->GetAuthorities();
std::vector<String> endpoints;
if ((type == "checker" && DynamicType::GetByName("CheckerComponent")) ||
(type == "notification" && DynamicType::GetByName("NotificationComponent")))
if ((type == "checker" && SupportsChecks()) ||
(type == "notification" && SupportsNotifications()))
endpoints.push_back(GetIdentity());
BOOST_FOREACH(const Endpoint::Ptr& endpoint, DynamicType::GetObjects<Endpoint>()) {
bool match = false;
if (!endpoint->IsConnected())
if (!endpoint->IsConnected() || !endpoint->HasFeature(type))
continue;
if (authorities) {
@ -1163,6 +1163,16 @@ void ClusterComponent::CheckAuthorityHandler(const DynamicObject::Ptr& object, c
result = (endpoints[index] == GetIdentity());
}
bool ClusterComponent::SupportsChecks(void)
{
return DynamicType::GetByName("CheckerComponent");
}
bool ClusterComponent::SupportsNotifications(void)
{
return DynamicType::GetByName("NotificationComponent");
}
void ClusterComponent::InternalSerialize(const Dictionary::Ptr& bag, int attributeTypes) const
{
DynamicObject::InternalSerialize(bag, attributeTypes);

View File

@ -112,6 +112,9 @@ private:
void AcknowledgementClearedHandler(const Service::Ptr& service, const String& authority);
void MessageHandler(const Endpoint::Ptr& sender, const Dictionary::Ptr& message);
void CheckAuthorityHandler(const DynamicObject::Ptr& object, const String& type, bool& result);
static bool SupportsChecks(void);
static bool SupportsNotifications(void);
};
}