diff options
author | Fedor Indutny <fedor@indutny.com> | 2015-02-23 23:09:44 +0300 |
---|---|---|
committer | Fedor Indutny <fedor@indutny.com> | 2015-02-24 22:38:21 +0300 |
commit | 1738c7783526868d86cb213414cb4d40c5a89662 (patch) | |
tree | 956d199d9e1b7f793bfe60db58bef27583ca1ebb /src/js_stream.h | |
parent | e00c938d246c29897344be3b3060533bb4ad7806 (diff) | |
download | node-new-1738c7783526868d86cb213414cb4d40c5a89662.tar.gz |
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 <christopher.s.dickinson@gmail.com>
Diffstat (limited to 'src/js_stream.h')
-rw-r--r-- | src/js_stream.h | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/src/js_stream.h b/src/js_stream.h index 6a2d3bfb4f..8e2ff13258 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<v8::Object> target, v8::Handle<v8::Value> unused, v8::Handle<v8::Context> 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<v8::Object> obj, AsyncWrap* parent); + ~JSStream(); + + AsyncWrap* GetAsyncWrap() override; + + static void New(const v8::FunctionCallbackInfo<v8::Value>& args); + static void DoAlloc(const v8::FunctionCallbackInfo<v8::Value>& args); + static void DoRead(const v8::FunctionCallbackInfo<v8::Value>& args); + static void DoAfterWrite(const v8::FunctionCallbackInfo<v8::Value>& args); + static void ReadBuffer(const v8::FunctionCallbackInfo<v8::Value>& args); + static void EmitEOF(const v8::FunctionCallbackInfo<v8::Value>& args); + + template <class Wrap> + static void Finish(const v8::FunctionCallbackInfo<v8::Value>& args); }; } // namespace node |