diff --git a/server/robotserver/coroutine.cc b/server/robotserver/coroutine.cc index dd072ae6..25d70737 100644 --- a/server/robotserver/coroutine.cc +++ b/server/robotserver/coroutine.cc @@ -5,12 +5,13 @@ #include "coroutine.h" #include "comgr.h" -void Awaiter::Await(std::shared_ptr parent) +void Awaiter::Await(std::shared_ptr notifyer) { - + notifyers_.push_back(notifyer); + DoAwait(); } -void Promise::Await(std::shared_ptr parent) +void Promise::DoAwait() { } @@ -107,7 +108,7 @@ void Coroutine::CallExit(boost::coroutines2::coroutine::push_type& sink) sink_ = nullptr; } -void Coroutine::Await(std::shared_ptr parent) +void Coroutine::DoAwait() { } diff --git a/server/robotserver/coroutine.h b/server/robotserver/coroutine.h index 9f6ac2d9..b8d8a911 100644 --- a/server/robotserver/coroutine.h +++ b/server/robotserver/coroutine.h @@ -33,8 +33,9 @@ class Awaiter : public std::enable_shared_from_this } protected: - - virtual void Await(std::shared_ptr parent); + std::list> notifyers_; + void Await(std::shared_ptr notifyer); + virtual void DoAwait() = 0; private: bool done_ = false; @@ -47,10 +48,8 @@ class Promise : public Awaiter { protected: - virtual void Await(std::shared_ptr parent) override; + virtual void DoAwait() override; - private: - std::shared_ptr parent_; }; class Coroutine : public Awaiter @@ -71,7 +70,7 @@ class Coroutine : public Awaiter void Deatch(); void CallEnter(boost::coroutines2::coroutine::push_type& sink); void CallExit(boost::coroutines2::coroutine::push_type& sink); - virtual void Await(std::shared_ptr parent) override; + virtual void DoAwait() override; private: list_head co_entry_;