summaryrefslogtreecommitdiff
path: root/src/js_stream.h
diff options
context:
space:
mode:
authorFedor Indutny <fedor@indutny.com>2015-02-23 23:09:44 +0300
committerFedor Indutny <fedor@indutny.com>2015-02-24 22:38:21 +0300
commit1738c7783526868d86cb213414cb4d40c5a89662 (patch)
tree956d199d9e1b7f793bfe60db58bef27583ca1ebb /src/js_stream.h
parente00c938d246c29897344be3b3060533bb4ad7806 (diff)
downloadandroid-node-v8-1738c7783526868d86cb213414cb4d40c5a89662.tar.gz
android-node-v8-1738c7783526868d86cb213414cb4d40c5a89662.tar.bz2
android-node-v8-1738c7783526868d86cb213414cb4d40c5a89662.zip
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.h30
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