#pragma once #include "../Stream.h" #include "../Streamer.h" namespace panda { namespace unievent { namespace streamer { struct StreamInput : Streamer::IInput, private IStreamSelfListener { StreamInput (const StreamSP& s) : stream(s) {} ErrorCode start (const LoopSP&) override; void stop () override; ErrorCode start_reading () override; void stop_reading () override; private: StreamSP stream; IStreamListener* prev_lst = nullptr; bool prev_wantread = false; void on_read (string&, const ErrorCode&) override; void on_eof () override; }; struct StreamOutput : Streamer::IOutput, private IStreamSelfListener { StreamOutput (const StreamSP& s) : stream(s) {} ErrorCode start (const LoopSP&) override; void stop () override; ErrorCode write (const string& data) override; size_t write_queue_size () const override { return stream->write_queue_size(); } private: StreamSP stream; IStreamListener* prev_lst = nullptr; WriteRequestSP first_wreq; bool handle_write_started = false; void on_write (const ErrorCode&, const WriteRequestSP&) override; }; }}}