#ifndef MONITOR_HH #define MONITOR_HH #include #include #include class Looper; class Monitor { public: enum State { SEARCHING, CONNECTED, }; struct Machine { std::string name; unsigned max_jobs; Machine() : max_jobs(0) { } }; class Observer { public: virtual ~Observer() {} virtual void state(Monitor* monitor, State state) = 0; virtual void added_machine(Monitor* monitor, uint32_t id) = 0; virtual void updated_machine(Monitor* monitor, uint32_t id) = 0; virtual void removed_machine(Monitor* monitor, uint32_t id) = 0; virtual void added_job(Monitor* monitor, uint32_t source_id, uint32_t target_id) = 0; virtual void removed_job(Monitor* monitor, uint32_t source_id, uint32_t target_id) = 0; protected: Observer() {} }; virtual ~Monitor() {} static std::unique_ptr create(std::shared_ptr const& looper); virtual void connect(std::string const& netname = std::string(), std::string const& scheduler = std::string(), uint16_t port = 0) = 0; virtual void disconnect() = 0; virtual size_t machines() const = 0; virtual uint32_t id(size_t index) const = 0; virtual Machine machine_at(size_t index) const = 0; virtual Machine machine(uint32_t id) const = 0; virtual void add_observer(Observer* observer) = 0; virtual void remove_observer(Observer* observer) = 0; #if FAKE_MONITOR virtual void toggle_fakes() = 0; #endif protected: Monitor() {} Monitor(Monitor const&) = delete; Monitor& operator=(Monitor const&) = delete; }; #endif // MONITOR_HH