diff options
Diffstat (limited to 'src/monitor.hh')
| -rw-r--r-- | src/monitor.hh | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/src/monitor.hh b/src/monitor.hh new file mode 100644 index 0000000..99e172b --- /dev/null +++ b/src/monitor.hh @@ -0,0 +1,62 @@ +#ifndef MONITOR_HH +#define MONITOR_HH + +#include <memory> +#include <string> + +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 Monitor* create(std::shared_ptr<Looper> 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; + +protected: + Monitor() {} + Monitor(Monitor const&) = delete; + Monitor& operator=(Monitor const&) = delete; +}; + +#endif // MONITOR_HH |
