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 #include <mutex>
9 #include <condition_variable>
10 
11 class QString;
12 
14 public:
15  virtual ~AbstractProcess() {}
16 
17  virtual void start(const std::string &command, bool use_input) = 0;
18  virtual int wait() = 0;
19  virtual void stop() = 0;
20  virtual bool isRunning() const = 0;
21  virtual int getExitCode() const = 0;
22  virtual void writeInput(char const *ptr, int len) = 0;
23 
24  virtual void closeInput(bool justnow) = 0;
25 
26  virtual std::vector<char> const &stdout_bytes() const = 0;
27  virtual std::vector<char> const &stderr_bytes() const = 0;
28 };
29 
30 
32 protected:
33  std::mutex mutex_;
34  std::condition_variable cond_;
35  QString change_dir_;
36  QVariant user_data_;
37  std::deque<char> output_queue_; // for log
38  std::vector<char> output_vector_; // for result
39  std::vector<char> stdout_bytes_;
40  std::vector<char> stderr_bytes_;
41  std::function<void (bool, const QVariant &)> completed_fn_;
42  void writeOutput(char const *buf, size_t len)
43  {
44  output_queue_.insert(output_queue_.end(), buf, buf + len);
45  output_vector_.insert(output_vector_.end(), buf, buf + len);
46  }
47 public:
48  virtual ~AbstractPtyProcess() {}
49 
50  void setChangeDir(QString const &dir);
51  void setCompletedHandler(std::function<void (bool, const QVariant &)> fn, QVariant const &userdata)
52  {
53  completed_fn_ = fn;
54  user_data_ = userdata;
55  }
56 
58  {
59  if (completed_fn_) {
61  }
62  }
63 
64  std::string getMessage() const; // deprecated
65  void clearMessage();
66 
67  std::vector<char> const &stdout_bytes() const
68  {
69  return stdout_bytes_;
70  }
71  std::vector<char> const &stderr_bytes() const
72  {
73  return stderr_bytes_;
74  }
75 
76  virtual void start(std::string const &cmd, std::string const &env, bool use_input) = 0;
77  virtual bool wait(unsigned long time = ULONG_MAX) = 0;
78  virtual void stop() = 0;
79  virtual bool isRunning() const = 0;
80  virtual int getExitCode() const = 0;
81  virtual void writeInput(char const *ptr, int len) = 0;
82 
83  virtual int readOutputStreaming(char *ptr, int len) = 0;
84 };
85 
86 #endif // ABSTRACTPROCESS_H
Definition: AbstractProcess.h:13
virtual bool isRunning() const =0
virtual std::vector< char > const & stderr_bytes() const =0
virtual int wait()=0
virtual void start(const std::string &command, bool use_input)=0
virtual void writeInput(char const *ptr, int len)=0
virtual ~AbstractProcess()
Definition: AbstractProcess.h:15
virtual void closeInput(bool justnow)=0
virtual std::vector< char > const & stdout_bytes() const =0
virtual int getExitCode() const =0
virtual void stop()=0
Definition: AbstractProcess.h:31
QString change_dir_
Definition: AbstractProcess.h:35
std::function< void(bool, const QVariant &)> completed_fn_
Definition: AbstractProcess.h:41
virtual void writeInput(char const *ptr, int len)=0
std::deque< char > output_queue_
Definition: AbstractProcess.h:37
void clearMessage()
Definition: AbstractProcess.cpp:14
virtual bool wait(unsigned long time=ULONG_MAX)=0
std::condition_variable cond_
Definition: AbstractProcess.h:34
virtual int readOutputStreaming(char *ptr, int len)=0
virtual void start(std::string const &cmd, std::string const &env, bool use_input)=0
virtual ~AbstractPtyProcess()
Definition: AbstractProcess.h:48
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:51
virtual int getExitCode() const =0
QVariant user_data_
Definition: AbstractProcess.h:36
std::vector< char > const & stdout_bytes() const
Definition: AbstractProcess.h:67
virtual bool isRunning() const =0
std::vector< char > stderr_bytes_
Definition: AbstractProcess.h:40
std::vector< char > output_vector_
Definition: AbstractProcess.h:38
void notifyCompleted()
Definition: AbstractProcess.h:57
void writeOutput(char const *buf, size_t len)
Definition: AbstractProcess.h:42
std::vector< char > const & stderr_bytes() const
Definition: AbstractProcess.h:71
std::vector< char > stdout_bytes_
Definition: AbstractProcess.h:39
std::mutex mutex_
Definition: AbstractProcess.h:33
std::string getMessage() const
Definition: AbstractProcess.cpp:8