Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/slic3r/Utils/Bonjour.hpp')
-rw-r--r--src/slic3r/Utils/Bonjour.hpp64
1 files changed, 64 insertions, 0 deletions
diff --git a/src/slic3r/Utils/Bonjour.hpp b/src/slic3r/Utils/Bonjour.hpp
new file mode 100644
index 000000000..63f34638c
--- /dev/null
+++ b/src/slic3r/Utils/Bonjour.hpp
@@ -0,0 +1,64 @@
+#ifndef slic3r_Bonjour_hpp_
+#define slic3r_Bonjour_hpp_
+
+#include <cstdint>
+#include <memory>
+#include <string>
+#include <functional>
+#include <boost/asio/ip/address.hpp>
+
+
+namespace Slic3r {
+
+
+struct BonjourReply
+{
+ boost::asio::ip::address ip;
+ uint16_t port;
+ std::string service_name;
+ std::string hostname;
+ std::string full_address;
+ std::string path;
+ std::string version;
+
+ BonjourReply() = delete;
+ BonjourReply(boost::asio::ip::address ip, uint16_t port, std::string service_name, std::string hostname, std::string path, std::string version);
+
+ bool operator==(const BonjourReply &other) const;
+ bool operator<(const BonjourReply &other) const;
+};
+
+std::ostream& operator<<(std::ostream &, const BonjourReply &);
+
+
+/// Bonjour lookup performer
+class Bonjour : public std::enable_shared_from_this<Bonjour> {
+private:
+ struct priv;
+public:
+ typedef std::shared_ptr<Bonjour> Ptr;
+ typedef std::function<void(BonjourReply &&)> ReplyFn;
+ typedef std::function<void()> CompleteFn;
+
+ Bonjour(std::string service, std::string protocol = "tcp");
+ Bonjour(Bonjour &&other);
+ ~Bonjour();
+
+ Bonjour& set_timeout(unsigned timeout);
+ Bonjour& set_retries(unsigned retries);
+ // ^ Note: By default there is 1 retry (meaning 1 broadcast is sent).
+ // Timeout is per one retry, ie. total time spent listening = retries * timeout.
+ // If retries > 1, then care needs to be taken as more than one reply from the same service may be received.
+
+ Bonjour& on_reply(ReplyFn fn);
+ Bonjour& on_complete(CompleteFn fn);
+
+ Ptr lookup();
+private:
+ std::unique_ptr<priv> p;
+};
+
+
+}
+
+#endif