ZeroTierOne/nonfree/controller/ControllerChangeNotifier.hpp
Grant Limberg 6113bad61e
Some checks failed
/ build_macos (push) Has been cancelled
/ build_windows (push) Has been cancelled
/ Central Controller Build (push) Has been cancelled
/ build_ubuntu (push) Has been cancelled
/ multi-arch-docker (push) Has been cancelled
make pubsub topics configurable
Also for pubsub trips back to CV1/CV2, rather than having 2 queues for each service (networks & members), theres now only a single queue for each change type, and `frontend = (cv1|cv2)` attribute is set on the message for filtering.
2025-09-18 09:33:04 -07:00

53 lines
No EOL
1.3 KiB
C++

#ifndef CONTROLLERCHANGENOTIFIER_HPP
#define CONTROLLERCHANGENOTIFIER_HPP
#include <memory>
#include <nlohmann/json.hpp>
#include <string>
namespace ZeroTier {
class PubSubWriter;
class ControllerChangeNotifier {
public:
virtual ~ControllerChangeNotifier() = default;
virtual void notifyNetworkChange(
const nlohmann::json& oldNetwork,
const nlohmann::json& newNetwork,
const std::string& frontend = "") = 0;
virtual void notifyMemberChange(
const nlohmann::json& oldMember,
const nlohmann::json newMember,
const std::string& frontend = "") = 0;
};
class PubSubChangeNotifier : public ControllerChangeNotifier {
public:
PubSubChangeNotifier(
std::string controllerID,
std::string project,
std::string memberChangeTopic,
std::string networkChangeTopic);
virtual ~PubSubChangeNotifier();
virtual void notifyNetworkChange(
const nlohmann::json& oldNetwork,
const nlohmann::json& newNetwork,
const std::string& frontend = "") override;
virtual void notifyMemberChange(
const nlohmann::json& oldMember,
const nlohmann::json newMember,
const std::string& frontend = "") override;
private:
std::shared_ptr<PubSubWriter> _networkChangeWriter;
std::shared_ptr<PubSubWriter> _memberChangeWriter;
};
} // namespace ZeroTier
#endif // CONTROLLERCHANGENOTIFIER_HPP