59 std::string Name()
const {
return m_universe_name; }
60 unsigned int UniverseId()
const {
return m_universe_id; }
61 merge_mode MergeMode()
const {
return m_merge_mode; }
62 bool IsActive()
const;
63 uint8_t ActivePriority()
const {
return m_active_priority; }
71 return m_rdm_discovery_interval;
78 return m_last_discovery_time;
82 void SetName(
const std::string &name);
83 void SetMergeMode(merge_mode merge_mode);
89 m_rdm_discovery_interval = discovery_interval;
94 const DmxBuffer &GetDMX()
const {
return m_buffer; }
97 bool AddPort(InputPort *port);
98 bool AddPort(OutputPort *port);
99 bool RemovePort(InputPort *port);
100 bool RemovePort(OutputPort *port);
101 bool ContainsPort(InputPort *port)
const;
102 bool ContainsPort(OutputPort *port)
const;
103 unsigned int InputPortCount()
const {
return m_input_ports.size(); }
104 unsigned int OutputPortCount()
const {
return m_output_ports.size(); }
105 void InputPorts(std::vector<InputPort*> *ports)
const;
106 void OutputPorts(std::vector<OutputPort*> *ports)
const;
109 bool AddSourceClient(Client *client);
110 bool RemoveSourceClient(Client *client);
111 bool ContainsSourceClient(Client *client)
const;
112 unsigned int SourceClientCount()
const {
return m_source_clients.size(); }
115 bool AddSinkClient(Client *client);
116 bool RemoveSinkClient(Client *client);
117 bool ContainsSinkClient(Client *client)
const;
118 unsigned int SinkClientCount()
const {
return m_sink_clients.size(); }
121 bool PortDataChanged(InputPort *port);
122 bool SourceClientDataChanged(Client *client);
138 bool operator==(
const Universe &other) {
139 return m_universe_id == other.UniverseId();
142 static const char K_FPS_VAR[];
143 static const char K_MERGE_HTP_STR[];
144 static const char K_MERGE_LTP_STR[];
145 static const char K_UNIVERSE_INPUT_PORT_VAR[];
146 static const char K_UNIVERSE_MODE_VAR[];
147 static const char K_UNIVERSE_NAME_VAR[];
148 static const char K_UNIVERSE_OUTPUT_PORT_VAR[];
149 static const char K_UNIVERSE_RDM_REQUESTS[];
150 static const char K_UNIVERSE_SINK_CLIENTS_VAR[];
151 static const char K_UNIVERSE_SOURCE_CLIENTS_VAR[];
152 static const char K_UNIVERSE_UID_COUNT_VAR[];
156 unsigned int expected_count;
157 unsigned int current_count;
160 std::vector<rdm::RDMFrame> frames;
161 } broadcast_request_tracker;
163 typedef std::map<Client*, bool> SourceClientMap;
165 std::string m_universe_name;
166 unsigned int m_universe_id;
167 std::string m_universe_id_str;
168 uint8_t m_active_priority;
169 enum merge_mode m_merge_mode;
170 std::vector<InputPort*> m_input_ports;
171 std::vector<OutputPort*> m_output_ports;
172 std::set<Client*> m_sink_clients;
177 SourceClientMap m_source_clients;
178 class UniverseStore *m_universe_store;
180 ExportMap *m_export_map;
181 std::map<ola::rdm::UID, OutputPort*> m_output_uids;
183 TimeInterval m_rdm_discovery_interval;
184 TimeStamp m_last_discovery_time;
187 void HandleBroadcastAck(broadcast_request_tracker *tracker,
189 void HandleBroadcastDiscovery(broadcast_request_tracker *tracker,
191 bool UpdateDependants();
194 void HTPMergeSources(
const std::vector<DmxSource> &sources);
195 bool MergeAll(
const InputPort *port,
const Client *client);
196 void PortDiscoveryComplete(BaseCallback0<void> *on_complete,
197 OutputPort *output_port,
201 void SafeIncrement(
const std::string &name);
202 void SafeDecrement(
const std::string &name);
204 template<
class PortClass>
205 bool GenericAddPort(PortClass *port,
206 std::vector<PortClass*> *ports);
208 template<
class PortClass>
209 bool GenericRemovePort(PortClass *port,
210 std::vector<PortClass*> *ports,
211 std::map<ola::rdm::UID, PortClass*> *uid_map = NULL);
213 template<
class PortClass>
214 bool GenericContainsPort(PortClass *port,
215 const std::vector<PortClass*> &ports)
const;
217 Universe(
const Universe &) =
delete;
218 const Universe &operator=(
const Universe &) =
delete;