#pragma once #include "../Fs.h" #include "../Streamer.h" #include namespace panda { namespace unievent { namespace streamer { struct FileInput : Streamer::IInput { FileInput (string_view path, size_t chunk_size = 1000000) : path(string(path)), chunk_size(chunk_size) {} ErrorCode start (const LoopSP&) override; void stop () override; ErrorCode start_reading () override; void stop_reading () override; private: string path; size_t chunk_size; LoopSP loop; fd_t fd; Fs::RequestSP fsreq; bool opened = false; bool pause = false; void do_read (); }; struct FileOutput : Streamer::IOutput { FileOutput (string_view path, int mode = Fs::DEFAULT_FILE_MODE) : path(string(path)), mode(mode) {} ErrorCode start (const LoopSP&) override; void stop () override; ErrorCode write (const string& data) override; size_t write_queue_size () const override { return bufsz; } private: string path; int mode; LoopSP loop; fd_t fd; Fs::RequestSP fsreq; bool opened = false; std::deque bufs; size_t bufsz = 0; void do_write (); }; }}}