84 lines
1.7 KiB
C++
84 lines
1.7 KiB
C++
|
|
// CommandOutput.h
|
|
|
|
// Declares various classes that process command output
|
|
|
|
|
|
|
|
|
|
|
|
/** Interface for a callback that receives command output
|
|
The Out() function is called for any output the command has produced.
|
|
Descendants override that function to provide specific processing of the output.
|
|
*/
|
|
class cCommandOutputCallback
|
|
{
|
|
public:
|
|
virtual ~cCommandOutputCallback() {}; // Force a virtual destructor in subclasses
|
|
|
|
/// Syntax sugar function, calls Out() with Printf()-ed parameters; appends a "\n"
|
|
void Out(const char * a_Fmt, ...) FORMATSTRING(2, 3);
|
|
|
|
/// Called when the command wants to output anything; may be called multiple times
|
|
virtual void Out(const AString & a_Text) = 0;
|
|
|
|
/// Called when the command processing has been finished
|
|
virtual void Finished(void) {};
|
|
} ;
|
|
|
|
|
|
|
|
|
|
|
|
/// Class that discards all command output
|
|
class cNullCommandOutputCallback :
|
|
public cCommandOutputCallback
|
|
{
|
|
// cCommandOutputCallback overrides:
|
|
virtual void Out(const AString & a_Text) override
|
|
{
|
|
// Do nothing
|
|
UNUSED(a_Text);
|
|
}
|
|
} ;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// Sends all command output to a log, line by line, when the command finishes processing
|
|
class cLogCommandOutputCallback :
|
|
public cCommandOutputCallback
|
|
{
|
|
public:
|
|
// cCommandOutputCallback overrides:
|
|
virtual void Out(const AString & a_Text) override;
|
|
virtual void Finished(void) override;
|
|
|
|
protected:
|
|
/// Output is stored here until the command finishes processing
|
|
AString m_Buffer;
|
|
} ;
|
|
|
|
|
|
|
|
|
|
|
|
/// Sends all command output to a log, line by line; deletes self when command finishes processing
|
|
class cLogCommandDeleteSelfOutputCallback :
|
|
public cLogCommandOutputCallback
|
|
{
|
|
typedef cLogCommandOutputCallback super;
|
|
|
|
virtual void Finished(void) override
|
|
{
|
|
super::Finished();
|
|
delete this;
|
|
}
|
|
} ;
|
|
|
|
|
|
|
|
|