OSSIA
Open Scenario System for Interactive Application
ossia-max/src/ZeroconfOscqueryListener.hpp
1 #pragma once
2 
3 #include <ossia/network/generic/generic_device.hpp>
4 
5 #include <servus/servus.h>
6 
7 #include <memory>
8 
9 namespace ossia
10 {
11 namespace max_binding
12 {
13 class ZeroconfOscqueryListener final : servus::Listener
14 {
15 public:
16  ZeroconfOscqueryListener();
17  ~ZeroconfOscqueryListener() override;
18 
19  static std::shared_ptr<ossia::net::generic_device>
20  find_device(const std::string& name);
21  static std::vector<std::shared_ptr<ossia::net::generic_device>> get_devices()
22  {
23  return s_devices;
24  }
25 
26  void browse();
27 
28  enum ConnectionEvent
29  {
30  ADDED = 0,
31  REMOVED
32  };
33 
34 private:
35  // since Max is not thread safe, we put connection events (from Servus thread) in a
36  // vector and process it at scheduled interval triggered by Max clock
37  void instanceAdded(const std::string& instance) final override;
38  void instanceRemoved(const std::string& instance) final override;
39  void addInstance(const std::string& instance);
40  void removeInstance(const std::string& instance);
41 
42  static std::vector<std::shared_ptr<ossia::net::generic_device>> s_devices;
43  static std::vector<std::pair<ConnectionEvent, std::string>> s_connection_events;
44 
45  servus::Servus service;
46  static std::mutex s_mutex;
47 };
48 
49 } // namespace pd
50 } // namespace ossia
Definition: git_info.h:7