mirror of https://github.com/lukechilds/node.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
2.6 KiB
83 lines
2.6 KiB
#ifndef SRC_STREAM_BASE_INL_H_
|
|
#define SRC_STREAM_BASE_INL_H_
|
|
|
|
#include "stream_base.h"
|
|
|
|
#include "node.h"
|
|
#include "env.h"
|
|
#include "env-inl.h"
|
|
#include "v8.h"
|
|
|
|
namespace node {
|
|
|
|
using v8::FunctionCallbackInfo;
|
|
using v8::FunctionTemplate;
|
|
using v8::Handle;
|
|
using v8::HandleScope;
|
|
using v8::Local;
|
|
using v8::PropertyAttribute;
|
|
using v8::PropertyCallbackInfo;
|
|
using v8::String;
|
|
using v8::Value;
|
|
|
|
template <class Base>
|
|
void StreamBase::AddMethods(Environment* env, Handle<FunctionTemplate> t) {
|
|
HandleScope scope(env->isolate());
|
|
|
|
enum PropertyAttribute attributes =
|
|
static_cast<PropertyAttribute>(v8::ReadOnly | v8::DontDelete);
|
|
t->InstanceTemplate()->SetAccessor(env->fd_string(),
|
|
GetFD<Base>,
|
|
nullptr,
|
|
Handle<Value>(),
|
|
v8::DEFAULT,
|
|
attributes);
|
|
|
|
env->SetProtoMethod(t, "readStart", JSMethod<Base, &StreamBase::ReadStart>);
|
|
env->SetProtoMethod(t, "readStop", JSMethod<Base, &StreamBase::ReadStop>);
|
|
env->SetProtoMethod(t, "shutdown", JSMethod<Base, &StreamBase::Shutdown>);
|
|
env->SetProtoMethod(t, "writev", JSMethod<Base, &StreamBase::Writev>);
|
|
env->SetProtoMethod(t,
|
|
"writeBuffer",
|
|
JSMethod<Base, &StreamBase::WriteBuffer>);
|
|
env->SetProtoMethod(t,
|
|
"writeAsciiString",
|
|
JSMethod<Base, &StreamBase::WriteString<ASCII> >);
|
|
env->SetProtoMethod(t,
|
|
"writeUtf8String",
|
|
JSMethod<Base, &StreamBase::WriteString<UTF8> >);
|
|
env->SetProtoMethod(t,
|
|
"writeUcs2String",
|
|
JSMethod<Base, &StreamBase::WriteString<UCS2> >);
|
|
env->SetProtoMethod(t,
|
|
"writeBinaryString",
|
|
JSMethod<Base, &StreamBase::WriteString<BINARY> >);
|
|
}
|
|
|
|
|
|
template <class Base>
|
|
void StreamBase::GetFD(Local<String> key,
|
|
const PropertyCallbackInfo<Value>& args) {
|
|
StreamBase* wrap = Unwrap<Base>(args.Holder());
|
|
|
|
if (!wrap->IsAlive())
|
|
return args.GetReturnValue().Set(UV_EINVAL);
|
|
|
|
args.GetReturnValue().Set(wrap->GetFD());
|
|
}
|
|
|
|
|
|
template <class Base,
|
|
int (StreamBase::*Method)(const FunctionCallbackInfo<Value>& args)>
|
|
void StreamBase::JSMethod(const FunctionCallbackInfo<Value>& args) {
|
|
StreamBase* wrap = Unwrap<Base>(args.Holder());
|
|
|
|
if (!wrap->IsAlive())
|
|
return args.GetReturnValue().Set(UV_EINVAL);
|
|
|
|
args.GetReturnValue().Set((wrap->*Method)(args));
|
|
}
|
|
|
|
} // namespace node
|
|
|
|
#endif // SRC_STREAM_BASE_INL_H_
|
|
|