#ifndef _MARIONETTE_H #define _MARIONETTE_H #include #include #include #include #include #include namespace sscl { class PuppeteerThread; } // namespace sscl namespace smo { namespace mrntt { class MarionetteComponent : public sscl::pptr::PuppeteerComponent { public: MarionetteComponent(const std::shared_ptr &thread) : sscl::pptr::PuppeteerComponent(thread) {} ~MarionetteComponent() = default; public: typedef std::function mrnttLifetimeMgmtOpCbFn; void initializeReq(sscl::Callback callback); void finalizeReq(sscl::Callback callback); // Intentionally doesn't take a callback. void exceptionInd(); void handleLoopExceptionHook() override; static void preJoltHook(sscl::PuppeteerThread &thr); protected: void postJoltHook() override; void tryBlock1Hook() override; void preLoopHook() override; void postLoopHook() override; void postTryBlock1CatchHook() override; void handleTryBlock1TypedException(const std::exception& e) override; void handleTryBlock1UnknownException() override; private: class MrnttLifetimeMgmtOp; class TerminationEvent; std::unique_ptr signals; bool callShutdownSalmanoff = false; }; extern std::shared_ptr thread; extern MarionetteComponent mrntt; void marionetteInitializeReqCb(bool success); void marionetteFinalizeReqCb(bool success); } // namespace mrntt } // namespace smo #endif