summaryrefslogtreecommitdiff
path: root/src/stream_wrap.h
diff options
context:
space:
mode:
authorRyan Dahl <ry@tinyclouds.org>2011-07-18 02:32:32 -0700
committerRyan Dahl <ry@tinyclouds.org>2011-07-18 03:08:54 -0700
commit1ae148909a2bd220cf48218a4c9ff295a611a65e (patch)
tree59b1f7634e4ffde64a9a982eb7f1ae3b9ef49cc9 /src/stream_wrap.h
parent404a4db6111f9dad8fe1bd924cc3ee6cc9eea06d (diff)
downloadnode-1ae148909a2bd220cf48218a4c9ff295a611a65e.tar.gz
Abstract StreamWrap from TCPWrap
Diffstat (limited to 'src/stream_wrap.h')
-rw-r--r--src/stream_wrap.h42
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_