Guitar
BasicProcessWin.h
Go to the documentation of this file.
1 #ifndef BASICPROCESSWIN_H
2 #define BASICPROCESSWIN_H
3 
4 #include "AbstractProcess.h"
5 
6 #include <condition_variable>
7 #include <cstdint>
8 #include <mutex>
9 #include <thread>
10 #include <vector>
11 
12 #ifdef _WIN32
13 #include <windows.h>
14 #else
15 #endif
16 
17 namespace misc {
18 std::string get_error_message(uint32_t error_code);
19 std::string build_command_line(std::vector<std::string> const &args);
20 
21 }
22 
24 public:
25  virtual ~_AbstractBasicProcess() { }
26  virtual bool start(std::string const &cmd) = 0;
27  virtual ProcessResult wait() = 0;
28  virtual void terminate() = 0;
29  virtual void close_input() = 0;
30  virtual int write_input(char const *ptr, int n) = 0;
31  virtual int read_output(char *ptr, int n) = 0;
32  virtual bool is_running() const = 0;
33  virtual std::vector<char> const &stdout_bytes() const = 0;
34  virtual int get_exit_code() const = 0;
35 };
36 
39 private:
40  struct Private;
42 
43  void sync_output();
44 public:
45  struct Options {
46  bool no_window = true;
47  bool output_stdout = false;
48  bool output_vector = false;
49  bool output_queue = false;
50  };
51  BasicProcessWin(Options const &options = Options());
54  void set_options(Options const &options);
55  bool is_running() const;
56  bool start(std::string const &cmd);
58  void terminate();
59  void close_input();
60  int write_input(char const *ptr, int n);
61  int read_output(char *ptr, int n);
62  int get_exit_code() const;
63  std::vector<char> const &stdout_bytes() const;
64 
65  bool wait_for_output(std::string const &text);
66 
67  // start() 前に設定すること。実行中の変更はスレッドセーフではない。
68  void set_completion_callback(std::function<void(bool, std::shared_ptr<void>)> const &fn, std::shared_ptr<void> user_data);
69  void notify_completed();
70 };
71 
72 #endif // BASICPROCESSWIN_H
Definition: BasicProcessWin.h:37
bool wait_for_output(std::string const &text)
Definition: BasicProcessWin.cpp:309
void notify_completed()
Definition: BasicProcessWin.cpp:137
Private * m
Definition: BasicProcessWin.h:40
~BasicProcessWin()
Definition: BasicProcessWin.cpp:113
void close_input()
Definition: BasicProcessWin.cpp:335
void set_change_dir(process::helper::dir_string_t const &dir)
Definition: BasicProcessWin.cpp:121
int write_input(char const *ptr, int n)
Definition: BasicProcessWin.cpp:343
BasicProcessWin(Options const &options=Options())
Definition: BasicProcessWin.cpp:107
void set_completion_callback(std::function< void(bool, std::shared_ptr< void >)> const &fn, std::shared_ptr< void > user_data)
Definition: BasicProcessWin.cpp:131
void terminate()
Definition: BasicProcessWin.cpp:301
std::vector< char > const & stdout_bytes() const
Definition: BasicProcessWin.cpp:380
int get_exit_code() const
Definition: BasicProcessWin.cpp:385
bool is_running() const
Definition: BasicProcessWin.cpp:375
void sync_output()
Definition: BasicProcessWin.cpp:260
bool start(std::string const &cmd)
Definition: BasicProcessWin.cpp:144
void set_options(Options const &options)
Definition: BasicProcessWin.cpp:126
int read_output(char *ptr, int n)
Definition: BasicProcessWin.cpp:358
ProcessResult wait()
Definition: BasicProcessWin.cpp:265
Definition: ProcessWinConPtyWithWorker.h:12
Definition: BasicProcessWin.h:23
virtual std::vector< char > const & stdout_bytes() const =0
virtual int write_input(char const *ptr, int n)=0
virtual ~_AbstractBasicProcess()
Definition: BasicProcessWin.h:25
virtual int read_output(char *ptr, int n)=0
virtual void terminate()=0
virtual ProcessResult wait()=0
virtual bool is_running() const =0
virtual void close_input()=0
virtual int get_exit_code() const =0
virtual bool start(std::string const &cmd)=0
Definition: misc.h:20
std::string build_command_line(std::vector< std::string > const &args)
Definition: BasicProcessWin.cpp:32
std::string get_error_message(uint32_t error_code)
Definition: BasicProcessWin.cpp:13
std::string dir_string_t
Definition: ProcessHelper.h:12
Definition: BasicProcessWin.h:45
bool no_window
Definition: BasicProcessWin.h:46
bool output_stdout
Definition: BasicProcessWin.h:47
bool output_vector
Definition: BasicProcessWin.h:48
bool output_queue
Definition: BasicProcessWin.h:49
Definition: BasicProcessWin.cpp:76
Definition: AbstractProcess.h:21