Guitar
AbstractProcess.h
Go to the documentation of this file.
1 #ifndef ABSTRACTPROCESS_H
2 #define ABSTRACTPROCESS_H
3 
4 #include <QObject>
5 #include <QVariant>
6 #include <deque>
7 #include <functional>
8 
9 class QString;
10 
11 class AbstractPtyProcess : public QObject {
12  Q_OBJECT
13 protected:
14  QString change_dir_;
15  QVariant user_data_;
16  std::deque<char> output_queue_; // for log
17  std::vector<char> output_vector_; // for result
18  std::function<void (bool, const QVariant &)> completed_fn_;
19 public:
20  void setChangeDir(QString const &dir);
21  void setCompletedHandler(std::function<void (bool, const QVariant &)> fn, QVariant const &userdata)
22  {
23  completed_fn_ = fn;
24  user_data_ = userdata;
25  }
26 
28  {
29  if (completed_fn_) {
31  }
32  }
33 
34  std::string getMessage() const;
35  void clearMessage();
36 
37  virtual bool isRunning() const = 0;
38  virtual void writeInput(char const *ptr, int len) = 0;
39  virtual int readOutput(char *ptr, int len) = 0;
40  virtual void start(QString const &cmd, QString const &env) = 0;
41  virtual bool wait(unsigned long time = ULONG_MAX) = 0;
42  virtual void stop() = 0;
43  virtual int getExitCode() const = 0;
44  virtual void readResult(std::vector<char> *out) = 0;
45 };
46 
48 private:
49  QString command_;
50 public:
51  bool isRunning() const
52  {
53  return false;
54  }
55  void writeInput(const char *ptr, int len)
56  {
57  (void)ptr;
58  (void)len;
59  }
60  int readOutput(char *ptr, int len)
61  {
62  (void)ptr;
63  (void)len;
64  return 0;
65  }
66  void start(const QString &cmd, const QString &env)
67  {
68  (void)env;
69  command_ = cmd;
70  }
71  bool wait(unsigned long time)
72  {
73  (void)time;
74  return true;
75  }
76  void stop()
77  {
78  }
79  int getExitCode() const
80  {
81  return 0;
82  }
83  QString getMessage() const
84  {
85  return QString();
86  }
87  void readResult(std::vector<char> *out)
88  {
89  out->clear();
90  }
91  QString command() const
92  {
93  return command_;
94  }
95 };
96 
97 #endif // ABSTRACTPROCESS_H
Definition: AbstractProcess.h:11
QString change_dir_
Definition: AbstractProcess.h:14
std::function< void(bool, const QVariant &)> completed_fn_
Definition: AbstractProcess.h:18
virtual void writeInput(char const *ptr, int len)=0
virtual void readResult(std::vector< char > *out)=0
std::deque< char > output_queue_
Definition: AbstractProcess.h:16
void clearMessage()
Definition: AbstractProcess.cpp:17
virtual bool wait(unsigned long time=ULONG_MAX)=0
virtual int readOutput(char *ptr, int len)=0
virtual void stop()=0
void setChangeDir(QString const &dir)
Definition: AbstractProcess.cpp:3
void setCompletedHandler(std::function< void(bool, const QVariant &)> fn, QVariant const &userdata)
Definition: AbstractProcess.h:21
virtual int getExitCode() const =0
QVariant user_data_
Definition: AbstractProcess.h:15
virtual bool isRunning() const =0
std::vector< char > output_vector_
Definition: AbstractProcess.h:17
void notifyCompleted()
Definition: AbstractProcess.h:27
virtual void start(QString const &cmd, QString const &env)=0
std::string getMessage() const
Definition: AbstractProcess.cpp:8
Definition: AbstractProcess.h:47
void start(const QString &cmd, const QString &env)
Definition: AbstractProcess.h:66
QString command() const
Definition: AbstractProcess.h:91
bool wait(unsigned long time)
Definition: AbstractProcess.h:71
QString command_
Definition: AbstractProcess.h:49
bool isRunning() const
Definition: AbstractProcess.h:51
void writeInput(const char *ptr, int len)
Definition: AbstractProcess.h:55
void readResult(std::vector< char > *out)
Definition: AbstractProcess.h:87
int readOutput(char *ptr, int len)
Definition: AbstractProcess.h:60
int getExitCode() const
Definition: AbstractProcess.h:79
QString getMessage() const
Definition: AbstractProcess.h:83
void stop()
Definition: AbstractProcess.h:76