#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;
};
}}}