AsyncFw 1.2
Async Framework is c++ runtime with timers, poll notifiers, sockets, coroutines, etc.
 
Loading...
Searching...
No Matches
MulticastDns.h
1#pragma once
2
3#include "../core/FunctionConnector.h"
4#include "Instance.h"
5
6namespace AsyncFw {
10class MulticastDns {
11public:
12 struct Host {
13 std::string name;
14 std::string ipv4;
15 std::string llipv4;
16 std::string misc;
17 uint16_t port = 0;
18 bool operator==(const Host &h) const { return name == h.name && ipv4 == h.ipv4 && llipv4 == h.llipv4 && misc == h.misc && port == h.port; }
19 bool operator!=(const Host &h) const { return !operator==(h); }
20 };
21
22 static inline MulticastDns *instance() { return instance_.value; }
23 MulticastDns(const std::string &serviceType = {});
24 ~MulticastDns();
25
26 //int sendDnsSd();
27 int sendQuery(int timeout = 0);
28
29 const std::vector<Host> hosts() const {
30 std::lock_guard<std::mutex> lock(mutex);
31 return hosts_;
32 }
33
34 void setServiceType(const std::string &_serviceType);
35 std::string serviceType() { return serviceType_; };
36
37 bool startService(const std::string &hostname, const std::string &llip, const std::string &misc, uint16_t port);
38 void stopService(bool send_goodbye = true);
39 bool serviceRunning();
40
41 bool startQuerier(int timeout = 60);
42 void stopQuerier();
43 bool querierRunning();
44
45 void append_(const Host &host);
46
47 FunctionConnectorProtected<MulticastDns>::Connector<const Host &> hostAdded;
48 FunctionConnectorProtected<MulticastDns>::Connector<const Host &> hostChanged;
49 FunctionConnectorProtected<MulticastDns>::Connector<const Host &> hostRemoved;
50
51private:
52 static inline Instance<MulticastDns> instance_ {"HttpServer"};
53 void servicePollEvent(int fd);
54 void querierPollEvent(int fd);
55 void querierTimerEvent();
56 int queryTimeout_;
57 int qtid;
58 std::vector<int> sfds;
59 std::vector<int> qfds;
60 std::vector<Host> hosts_;
61 std::string serviceType_;
62 int sendQuery(const std::vector<std::pair<std::string, std::string>> &list, int timeout = 0);
63 void update();
64 mutable std::mutex mutex;
65 AbstractThread *thread_;
66};
67} // namespace AsyncFw
The AbstractThread class provides the base functionality for thread management.
Definition AbstractThread.h:46
The Instance class.
Definition Instance.h:40