123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- #ifndef RTC_BASE_STREAM_H_
- #define RTC_BASE_STREAM_H_
- #include <memory>
- #include "rtc_base/buffer.h"
- #include "rtc_base/constructor_magic.h"
- #include "rtc_base/critical_section.h"
- #include "rtc_base/message_handler.h"
- #include "rtc_base/system/rtc_export.h"
- #include "rtc_base/third_party/sigslot/sigslot.h"
- #include "rtc_base/thread.h"
- namespace rtc {
- enum StreamState { SS_CLOSED, SS_OPENING, SS_OPEN };
- enum StreamResult { SR_ERROR, SR_SUCCESS, SR_BLOCK, SR_EOS };
- enum StreamEvent { SE_OPEN = 1, SE_READ = 2, SE_WRITE = 4, SE_CLOSE = 8 };
- struct StreamEventData : public MessageData {
- int events, error;
- StreamEventData(int ev, int er) : events(ev), error(er) {}
- };
- class RTC_EXPORT StreamInterface : public MessageHandler {
- public:
- enum { MSG_POST_EVENT = 0xF1F1, MSG_MAX = MSG_POST_EVENT };
- ~StreamInterface() override;
- virtual StreamState GetState() const = 0;
-
-
-
-
-
-
-
-
-
-
-
-
-
- virtual StreamResult Read(void* buffer,
- size_t buffer_len,
- size_t* read,
- int* error) = 0;
- virtual StreamResult Write(const void* data,
- size_t data_len,
- size_t* written,
- int* error) = 0;
-
-
- virtual void Close() = 0;
-
-
-
-
-
-
-
-
- sigslot::signal3<StreamInterface*, int, int> SignalEvent;
-
-
-
- void PostEvent(Thread* t, int events, int err);
-
- void PostEvent(int events, int err);
-
- virtual bool Flush();
-
-
-
-
-
-
-
-
-
-
- StreamResult WriteAll(const void* data,
- size_t data_len,
- size_t* written,
- int* error);
- protected:
- StreamInterface();
-
- void OnMessage(Message* msg) override;
- private:
- RTC_DISALLOW_COPY_AND_ASSIGN(StreamInterface);
- };
- class StreamAdapterInterface : public StreamInterface,
- public sigslot::has_slots<> {
- public:
- explicit StreamAdapterInterface(StreamInterface* stream, bool owned = true);
-
- StreamState GetState() const override;
- StreamResult Read(void* buffer,
- size_t buffer_len,
- size_t* read,
- int* error) override;
- StreamResult Write(const void* data,
- size_t data_len,
- size_t* written,
- int* error) override;
- void Close() override;
- bool Flush() override;
- void Attach(StreamInterface* stream, bool owned = true);
- StreamInterface* Detach();
- protected:
- ~StreamAdapterInterface() override;
-
-
- virtual void OnEvent(StreamInterface* stream, int events, int err);
- StreamInterface* stream() { return stream_; }
- private:
- StreamInterface* stream_;
- bool owned_;
- RTC_DISALLOW_COPY_AND_ASSIGN(StreamAdapterInterface);
- };
- }
- #endif
|