11#include <promeki/config.h>
24PROMEKI_NAMESPACE_BEGIN
101 using RecordList = ::promeki::List<Record>;
109 static NdiDiscovery &instance();
117 bool isRunning()
const {
return _running.value(); }
126 RecordList sources()
const;
141 RecordList sources(
int minUptimeMs)
const;
170 String waitForSource(
const String &nameOrPattern,
int timeoutMs);
181 static String matchCanonical(
const RecordList &records,
182 const String &nameOrPattern);
190 void setPollIntervalMs(
int ms);
199 void setGroups(
const String &commaSeparated);
208 void setExtraIps(
const String &commaSeparated);
213 int pollIntervalMs()
const;
221 int64_t uptimeMs()
const;
223 NdiDiscovery(
const NdiDiscovery &) =
delete;
224 NdiDiscovery &operator=(
const NdiDiscovery &) =
delete;
232 mutable Mutex _mutex;
233 mutable WaitCondition _condRegistry;
234 WaitCondition _condConfig;
235 Map<String, Record> _registry;
236 Atomic<bool> _running{
false};
237 Atomic<bool> _shutdown{
false};
238 Atomic<bool> _configDirty{
false};
239 Atomic<int> _pollIntervalMs{500};
242 TimeStamp _startTime;