diff options
author | ancarola <raffaele.ancarola@epfl.ch> | 2019-01-28 17:41:06 +0100 |
---|---|---|
committer | ancarola <raffaele.ancarola@epfl.ch> | 2019-01-28 17:41:06 +0100 |
commit | 6e453cb08481bcdff3cf94d84b34505153dd7279 (patch) | |
tree | 90252d46ebb148203554ecfceefb79c706eb53d9 /engine/signal.cpp | |
parent | Merge remote-tracking branch 'nao/master' (diff) | |
download | flatland-6e453cb08481bcdff3cf94d84b34505153dd7279.tar.gz flatland-6e453cb08481bcdff3cf94d84b34505153dd7279.zip |
Channel interface improved
Diffstat (limited to '')
-rw-r--r-- | engine/signal.cpp | 34 |
1 files changed, 23 insertions, 11 deletions
diff --git a/engine/signal.cpp b/engine/signal.cpp index 0a57caa..d6be29b 100644 --- a/engine/signal.cpp +++ b/engine/signal.cpp @@ -20,12 +20,25 @@ channel::~channel() channels.erase(label); } -void channel::start(priority_t prior) +bool channel::start(priority_t prior, job * _job) { + npdebug("Trying to map channel: ", label); + + if (map()) + checker.reset(); // force count to zero, it should remove task too + else + return false; + npdebug("Starting channel: ", label); + // take main job if no job is specified + if (!_job) + _job = &flat::main_job(); + // Initialize task - checker = flat::main_job().delegate_task(&channel::check_and_call, this, prior); + checker = _job->delegate_task(&channel::check_and_call, this, prior); + + return true; } bool channel::map() @@ -97,16 +110,17 @@ listener::ptr channel::connect(listener::callback f, const std::initializer_list return nullptr; } -channel::ptr channel::create(const std::string& id, priority_t prior) +bool channel::legit() const { - ptr out = std::make_shared<channel>(id); - - if (!out->map()) - return nullptr; + return mapped; +} - out->start(prior); +channel::ptr channel::create(const std::string& id, priority_t prior, job * _job) +{ + ptr out = std::make_shared<channel>(id); - return out; + // do not create a non-legit channel + return out->start(prior, _job) ? out : nullptr; } channel::ptr channel::find(const std::string& id) @@ -119,8 +133,6 @@ channel::ptr channel::find(const std::string& id) return (it == channels.end()) ? nullptr : (*it).second.lock(); } -int step = 0; - void channel::check_and_call() { if (!stack.empty()) { |