diff options
author | Ryan Dahl <ry@tinyclouds.org> | 2011-07-18 02:32:32 -0700 |
---|---|---|
committer | Ryan Dahl <ry@tinyclouds.org> | 2011-07-18 03:08:54 -0700 |
commit | 1ae148909a2bd220cf48218a4c9ff295a611a65e (patch) | |
tree | 59b1f7634e4ffde64a9a982eb7f1ae3b9ef49cc9 /src/stream_wrap.h | |
parent | 404a4db6111f9dad8fe1bd924cc3ee6cc9eea06d (diff) | |
download | node-1ae148909a2bd220cf48218a4c9ff295a611a65e.tar.gz |
Abstract StreamWrap from TCPWrap
Diffstat (limited to 'src/stream_wrap.h')
-rw-r--r-- | src/stream_wrap.h | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/stream_wrap.h b/src/stream_wrap.h new file mode 100644 index 000000000..fb233a447 --- /dev/null +++ b/src/stream_wrap.h @@ -0,0 +1,42 @@ +#ifndef STREAM_WRAP_H_ +#define STREAM_WRAP_H_ + +namespace node { + +class StreamWrap { + public: + static void Initialize(v8::Handle<v8::Object> target); + + // JavaScript functions + static v8::Handle<v8::Value> Write(const v8::Arguments& args); + static v8::Handle<v8::Value> ReadStart(const v8::Arguments& args); + static v8::Handle<v8::Value> ReadStop(const v8::Arguments& args); + static v8::Handle<v8::Value> Shutdown(const v8::Arguments& args); + static v8::Handle<v8::Value> Close(const v8::Arguments& args); + + protected: + StreamWrap(v8::Handle<v8::Object> object, uv_stream_t* stream); + ~StreamWrap(); + + v8::Persistent<v8::Object> object_; + + private: + void UpdateWriteQueueSize(); + static inline char* NewSlab(v8::Handle<v8::Object> global, v8::Handle<v8::Object> wrap_obj); + + // Callbacks for libuv + static void AfterWrite(uv_write_t* req, int status); + static uv_buf_t OnAlloc(uv_stream_t* handle, size_t suggested_size); + static void OnRead(uv_stream_t* handle, ssize_t nread, uv_buf_t buf); + static void AfterShutdown(uv_shutdown_t* req, int status); + static void OnClose(uv_handle_t* handle); + + size_t slab_offset_; + uv_stream_t* stream_; +}; + + +} // namespace node + + +#endif // STREAM_WRAP_H_ |