#pragma once #include #include #include #include #include #include #import #include "optional.hpp" #include "subprocess.hpp" @class RTaskOptions; @interface RTaskOptions : NSObject @property (strong) NSString* binPath; @property (strong) NSArray* arguments; @property (strong) NSString* i2pBaseDir; @end @class RouterTask; @interface RouterTask : NSObject @property (strong) NSTask* routerTask; @property (strong) NSUserDefaults *userPreferences; @property (strong) NSFileHandle *readLogHandle; @property (strong) NSMutableData *totalLogData; @property (strong) NSPipe *processPipe; @property (strong) NSFileHandle *input; - (instancetype) initWithOptions : (RTaskOptions*) options; - (int) execute; - (int) getPID; @end using namespace subprocess; class JavaRunner; typedef std::function fp_t; typedef std::function fp_proc_t; /** * * class JavaRunner * **/ class JavaRunner { public: // copy fn JavaRunner(std::string& javaBin, std::string& arguments, std::string& i2pBaseDir, const fp_proc_t& executingFn, const fp_t& cb); ~JavaRunner() = default; static const std::vector defaultStartupFlags; static const std::vector defaultFlagsForExtractorJob; void requestRouterShutdown(); std::experimental::optional > execute(); std::shared_ptr javaProcess; std::string javaBinaryPath; std::string javaRouterArgs; std::string execLine; std::string _i2pBaseDir; private: const fp_proc_t& executingFn; const fp_t& exitCallbackFn; };