Implement C++ bindings for pipe io client
This commit is contained in:
		
							
								
								
									
										72
									
								
								clients/c_cpp/pipe_io.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								clients/c_cpp/pipe_io.hpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,72 @@
 | 
				
			|||||||
 | 
					extern "C" {
 | 
				
			||||||
 | 
					#include "pipe_io.h"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#include <string>
 | 
				
			||||||
 | 
					#include <iostream>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class PipeReader {
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					    PipeReader(const char* pipe_path)
 | 
				
			||||||
 | 
					    :preader(new_pipe_reader(pipe_path)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    virtual ~PipeReader() {
 | 
				
			||||||
 | 
					        close_pipe_reader(&this->preader);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    PipeReader(PipeReader&) = delete;
 | 
				
			||||||
 | 
					    PipeReader(PipeReader&&) = delete;
 | 
				
			||||||
 | 
					    PipeReader& operator=(const PipeReader&) = delete;
 | 
				
			||||||
 | 
					    PipeReader& operator=(const PipeReader&&) = delete;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void run() {
 | 
				
			||||||
 | 
					        while (const char* linebuf = this->recv_message()) {
 | 
				
			||||||
 | 
					            std::string msg(linebuf);
 | 
				
			||||||
 | 
					            this->handle_message(msg);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const char* recv_message() {
 | 
				
			||||||
 | 
					        return recv_msg_pipe_reader(&this->preader);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    virtual void handle_message(std::string msg) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					private:
 | 
				
			||||||
 | 
					    pipe_reader preader;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class PipeWriter {
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					    PipeWriter(const char* pipe_path)
 | 
				
			||||||
 | 
					    :pwriter(new_pipe_writer(pipe_path)) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    virtual ~PipeWriter() {
 | 
				
			||||||
 | 
					        close_pipe_writer(&this->pwriter);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    PipeWriter(PipeReader&) = delete;
 | 
				
			||||||
 | 
					    PipeWriter(PipeReader&&) = delete;
 | 
				
			||||||
 | 
					    PipeWriter& operator=(const PipeReader&) = delete;
 | 
				
			||||||
 | 
					    PipeWriter& operator=(const PipeReader&&) = delete;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    void send_message(std::string msg) {
 | 
				
			||||||
 | 
					        send_msg_pipe_writer(&this->pwriter, msg.c_str());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					private:
 | 
				
			||||||
 | 
					    pipe_writer pwriter;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class PipeIO : public PipeReader, public PipeWriter {
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					    PipeIO(const char* in_pipe_path, const char* out_pipe_path)
 | 
				
			||||||
 | 
					    :PipeReader(in_pipe_path), PipeWriter(out_pipe_path) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    PipeIO(PipeReader&) = delete;
 | 
				
			||||||
 | 
					    PipeIO(PipeReader&&) = delete;
 | 
				
			||||||
 | 
					    PipeIO& operator=(const PipeReader&) = delete;
 | 
				
			||||||
 | 
					    PipeIO& operator=(const PipeReader&&) = delete;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
							
								
								
									
										19
									
								
								clients/c_cpp/test.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								clients/c_cpp/test.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
				
			|||||||
 | 
					#include <iostream>
 | 
				
			||||||
 | 
					#include <string>
 | 
				
			||||||
 | 
					#include <fstream>
 | 
				
			||||||
 | 
					#include "pipe_io.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class EchoPipeIO : public PipeIO {
 | 
				
			||||||
 | 
					    using PipeIO::PipeIO;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    virtual void handle_message(std::string msg) override {
 | 
				
			||||||
 | 
					        this->send_message(msg);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int main() {
 | 
				
			||||||
 | 
					    EchoPipeIO echo_pipe_io("in", "out");
 | 
				
			||||||
 | 
					    echo_pipe_io.run();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user