From 9f407da475e8e8b9c086ecba4df50f9fbc117133 Mon Sep 17 00:00:00 2001 From: Kevin Matz Date: Sun, 20 Jun 2021 09:35:56 -0400 Subject: [PATCH] seperate termination from ending semantics --- sacn/source.cpp | 66 ++++++++++++++++++++++++++++++++++++++++++------- sacn/source.h | 3 +++ 2 files changed, 60 insertions(+), 9 deletions(-) diff --git a/sacn/source.cpp b/sacn/source.cpp index 49b5034..abf2fff 100644 --- a/sacn/source.cpp +++ b/sacn/source.cpp @@ -25,27 +25,75 @@ namespace SACN { +/** + * @brief Source::Source + * @param cid + */ Source::Source(UUID::uuid cid) : Appliance(cid) { } + +/** + * @brief Source::create + * @param num + */ void Source::create(const uint16_t num) { - if (!universes_.count(num)) - universes_.emplace(num, new Universe()); -} - -void Source::terminate(const uint16_t num) { if (universes_.count(num)) - universes_.erase(num); + return; + universes_.emplace(num, new Universe()); + + auto source = std::shared_ptr(new UniverseSource()); + source->setCID(this->cid()); + source->setDescription(this->name()); + source->setUniverse(num); + universes_[num]->setSource(source); } -Universe * Source::universe(const uint16_t num) { - if (universes_.count(num)) + +/** + * @brief Source::terminate + * @param num + */ +void Source::terminate(const uint16_t num) +{ + if (!universes_.count(num)) + return; + + auto source = universes_[num]->source(); + source->setOptions(0 | source->isForced() + | source->isPreview() + | DATA::STREAM_TERMINATED); +} + + +/** + * @brief Source::end + * @param num + */ +void Source::end(const uint16_t num) +{ + if (!universes_.count(num)) + return; + + universes_.erase(num); +} + + +/** + * @brief Source::universe + * @param num + * @return + */ +Universe * Source::universe(const uint16_t num) +{ + if (!universes_.count(num)) + return 0; + return universes_.at(num); - return 0; } } // SACN diff --git a/sacn/source.h b/sacn/source.h index 4e8fb55..8c8f94f 100644 --- a/sacn/source.h +++ b/sacn/source.h @@ -39,6 +39,9 @@ public: virtual void terminate(const uint16_t); Universe * universe(const uint16_t); +protected: + virtual void end(const uint16_t); + private: std::unordered_map universes_; };