Polyphase Game Engine
Loading...
Searching...
No Matches
ITerminalProcess.h
Go to the documentation of this file.
1#pragma once
2
3#if EDITOR
4
6
7#include <functional>
8#include <string>
9#include <utility>
10#include <vector>
11
17struct TerminalLaunchConfig
18{
19 std::string mExecutable; // Absolute or PATH-resolvable path
20 std::vector<std::string> mArgs; // Args (no quoting required)
21 std::string mWorkingDir; // Optional; empty = inherit parent
22 std::vector<std::pair<std::string, std::string>> mEnv; // Additive env vars
23 int mGracefulShutdownMs = 2000; // Stop helper graceful timeout
24};
25
35class ITerminalProcess
36{
37public:
38 using OutputCallback = std::function<void(TerminalEntryKind kind, std::string text)>;
39 using ExitCallback = std::function<void(int exitCode)>;
40
41 virtual ~ITerminalProcess() = default;
42
44 virtual bool Start(const TerminalLaunchConfig& cfg, std::string& outError) = 0;
45
47 virtual bool WriteStdin(const char* data, size_t len) = 0;
48
50 virtual void RequestStop() = 0;
51
53 virtual void ForceKill() = 0;
54
56 virtual bool IsRunning() const = 0;
57
59 virtual int GetExitCode() const = 0;
60
62 virtual void Join() = 0;
63
72 virtual bool IsTty() const = 0;
73
74 void SetOutputCallback(OutputCallback cb) { mOnOutput = std::move(cb); }
75 void SetExitCallback(ExitCallback cb) { mOnExit = std::move(cb); }
76
77protected:
78 OutputCallback mOnOutput;
79 ExitCallback mOnExit;
80};
81
83ITerminalProcess* CreateTerminalProcess();
84
92ITerminalProcess* CreateTerminalProcessConPTY();
93
94#endif