#ifndef _MARIONETTE_H #define _MARIONETTE_H #include #include #include #include namespace sscl { class MarionetteThread; namespace mrntt { class MarionetteComponent : public sscl::Component { public: MarionetteComponent(const std::shared_ptr &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(); private: class MrnttLifetimeMgmtOp; class TerminationEvent; }; extern std::shared_ptr thread; extern std::atomic exitCode; void exitMarionetteLoop(); void marionetteFinalizeReqCb(bool success); extern MarionetteComponent mrntt; } // namespace mrntt struct CrtCommandLineArgs { CrtCommandLineArgs(int argc, char *argv[], char *envp[]) : argc(argc), argv(argv), envp(envp) {} int argc; char **argv; char **envp; static void set(int argc, char *argv[], char *envp[]); }; } // namespace sscl #endif // _MARIONETTE_H