From 1738c7783526868d86cb213414cb4d40c5a89662 Mon Sep 17 00:00:00 2001 From: Fedor Indutny Date: Mon, 23 Feb 2015 23:09:44 +0300 Subject: streams: introduce StreamWrap and JSStream Introduce a way to wrap plain-js `stream.Duplex` streams into C++ StreamBase's child class. With such method at hand it is now possible to pass `stream.Duplex` instance as a `socket` parameter to `tls.connect()`. PR-URL: https://github.com/iojs/io.js/pull/926 Reviewed-By: Chris Dickinson --- src/js_stream.h | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) (limited to 'src/js_stream.h') diff --git a/src/js_stream.h b/src/js_stream.h index 6a2d3bfb4fc..8e2ff13258b 100644 --- a/src/js_stream.h +++ b/src/js_stream.h @@ -8,11 +8,39 @@ namespace node { -class JSStream : public StreamBase { +class JSStream : public StreamBase, public AsyncWrap { public: static void Initialize(v8::Handle target, v8::Handle unused, v8::Handle context); + + void* Cast() override; + bool IsAlive() override; + bool IsClosing() override; + int ReadStart() override; + int ReadStop() override; + + int DoShutdown(ShutdownWrap* req_wrap) override; + int DoWrite(WriteWrap* w, + uv_buf_t* bufs, + size_t count, + uv_stream_t* send_handle) override; + + protected: + JSStream(Environment* env, v8::Handle obj, AsyncWrap* parent); + ~JSStream(); + + AsyncWrap* GetAsyncWrap() override; + + static void New(const v8::FunctionCallbackInfo& args); + static void DoAlloc(const v8::FunctionCallbackInfo& args); + static void DoRead(const v8::FunctionCallbackInfo& args); + static void DoAfterWrite(const v8::FunctionCallbackInfo& args); + static void ReadBuffer(const v8::FunctionCallbackInfo& args); + static void EmitEOF(const v8::FunctionCallbackInfo& args); + + template + static void Finish(const v8::FunctionCallbackInfo& args); }; } // namespace node -- cgit v1.2.3