void DelegationComponent::Start(void)
{
m_AllServices = boost::make_shared<ConfigObject::Set>(ConfigObject::GetAllObjects(), ConfigObject::MakeTypePredicate("service"));
- m_AllServices->OnObjectCommitted.connect(boost::bind(&DelegationComponent::ObjectCommittedHandler, this, _2));
+ m_AllServices->OnObjectCommitted.connect(boost::bind(&DelegationComponent::ServiceCommittedHandler, this, _2));
+ m_AllServices->OnObjectRemoved.connect(boost::bind(&DelegationComponent::ServiceRemovedHandler, this, _2));
m_AllServices->Start();
m_DelegationTimer = boost::make_shared<Timer>();
mgr->UnregisterEndpoint(m_Endpoint);
}
-void DelegationComponent::ObjectCommittedHandler(const ConfigObject::Ptr& object)
+void DelegationComponent::ServiceCommittedHandler(Service service)
{
- Service service(object);
-
string checker = service.GetChecker();
if (!checker.empty()) {
}
}
+void DelegationComponent::ServiceRemovedHandler(Service service)
+{
+ string checker = service.GetChecker();
+
+ if (!checker.empty()) {
+ /* TODO: figure out a better way to clear individual services */
+ Endpoint::Ptr endpoint = EndpointManager::GetInstance()->GetEndpointByIdentity(checker);
+
+ if (endpoint)
+ ClearServices(endpoint);
+ }
+}
+
void DelegationComponent::AssignService(const Endpoint::Ptr& checker, const Service& service)
{
RequestMessage request;
void NewEndpointHandler(const Endpoint::Ptr& endpoint);
void SessionEstablishedHandler(const Endpoint::Ptr& endpoint);
- void ObjectCommittedHandler(const ConfigObject::Ptr& object);
+ void ServiceCommittedHandler(Service service);
+ void ServiceRemovedHandler(Service service);
void DelegationTimerHandler(void);
vector<Endpoint::Ptr> GetCheckerCandidates(const Service& service) const;