#ifndef DISCOVERYCOMPONENT_H #define DISCOVERYCOMPONENT_H namespace icinga { class ComponentDiscoveryInfo : public Object { public: typedef shared_ptr Ptr; typedef weak_ptr WeakPtr; string Node; string Service; set SubscribedMethods; set PublishedMethods; }; class DiscoveryComponent : public IcingaComponent { private: VirtualEndpoint::Ptr m_DiscoveryEndpoint; map m_Components; bool m_Broker; int NewEndpointHandler(const NewEndpointEventArgs& neea); int NewIdentityHandler(const EventArgs& ea); int NewComponentMessageHandler(const NewRequestEventArgs& nrea); int RegisterComponentMessageHandler(const NewRequestEventArgs& nrea); void SendDiscoveryMessage(string method, string identity, Endpoint::Ptr recipient); void ProcessDiscoveryMessage(string identity, DiscoveryMessage message); bool GetComponentDiscoveryInfo(string component, ComponentDiscoveryInfo::Ptr *info) const; int CheckExistingEndpoint(Endpoint::Ptr endpoint, const NewEndpointEventArgs& neea); int DiscoveryEndpointHandler(const NewEndpointEventArgs& neea, ComponentDiscoveryInfo::Ptr info) const; int DiscoverySinkHandler(const NewMethodEventArgs& nmea, ComponentDiscoveryInfo::Ptr info) const; int DiscoverySourceHandler(const NewMethodEventArgs& nmea, ComponentDiscoveryInfo::Ptr info) const; bool IsBroker(void) const; public: virtual string GetName(void) const; virtual void Start(void); virtual void Stop(void); void AddSubscribedMethod(string identity, string method); bool IsSubscribedMethod(string identity, string method) const; void AddPublishedMethod(string identity, string method); bool IsPublishedMethod(string identity, string method) const; }; } #endif /* DISCOVERYCOMPONENT_H */