11#include <promeki/config.h>
12#if PROMEKI_ENABLE_MDNS
25PROMEKI_NAMESPACE_BEGIN
73class MdnsResolver :
public ObjectBase {
74 PROMEKI_OBJECT(MdnsResolver, ObjectBase)
77 static constexpr int64_t DefaultTimeoutMs = 3000;
87 explicit MdnsResolver(
const MdnsServiceInstance &target, ObjectBase *parent =
nullptr);
90 ~MdnsResolver()
override;
93 const MdnsServiceInstance &target()
const {
return _target; }
102 void setManager(MdnsManager *manager);
105 MdnsManager *manager()
const;
108 void setTimeout(
const Duration &timeout);
111 const Duration &timeout()
const {
return _timeout; }
136 bool isActive()
const {
return _active.value(); }
139 MdnsServiceInstance snapshot()
const;
142 PROMEKI_SIGNAL(resolved, MdnsServiceInstance);
145 PROMEKI_SIGNAL(failed, Error);
149 void timerEvent(TimerEvent *e)
override;
154 void onBrowserFound(MdnsServiceInstance inst);
155 void onBrowserUpdated(MdnsServiceInstance inst);
156 void onBrowserLost(MdnsServiceInstance inst);
162 static bool isComplete(
const MdnsServiceInstance &inst);
164 MdnsServiceInstance _target;
165 UniquePtr<MdnsBrowser> _browser;
166 MdnsServiceInstance _snapshot;
169 Atomic<bool> _active;
170 Atomic<bool> _emitted;