NODE_SET_PROTOTYPE_METHOD(constructor_template, "connect", v8Connect);
NODE_SET_PROTOTYPE_METHOD(constructor_template, "send", v8Send);
+ NODE_SET_PROTOTYPE_METHOD(constructor_template, "sendUtf8", v8SendUtf8);
NODE_SET_PROTOTYPE_METHOD(constructor_template, "close", v8Close);
NODE_SET_PROTOTYPE_METHOD(constructor_template, "fullClose", v8FullClose);
NODE_SET_PROTOTYPE_METHOD(constructor_template, "forceClose", v8ForceClose);
return b;
}
+Handle<Value>
+Connection::v8SendUtf8 (const Arguments& args)
+{
+ HandleScope scope;
+ Connection *connection = NODE_UNWRAP(Connection, args.Holder());
+ if (!connection) return Handle<Value>();
+
+ if (!args[0]->IsString())
+ return ThrowException(String::New("Must have string argument"));
+
+ // utf8 encoding
+ Local<String> s = args[0]->ToString();
+ size_t length = s->Utf8Length();
+ oi_buf *buf = new_buf(length);
+ s->WriteUtf8(buf->base, length);
+ connection->Send(buf);
+
+ return Undefined();
+}
Handle<Value>
Connection::v8Send (const Arguments& args)
// XXX
// A lot of improvement can be made here. First of all we're allocating
// oi_bufs for every send which is clearly inefficent - it should use a
- // memory pool or ring buffer. In either case, v8 needs to be informed
- // about our allocations deallocations via
- // V8::AdjustAmountOfExternalAllocatedMemory to give the GC hints about
- // what we're doing here. Of course, expressing binary data as an array
- // of integers is extremely inefficent. This can improved when v8 bug 270
- // (http://code.google.com/p/v8/issues/detail?id=270) has been addressed.
+ // memory pool or ring buffer. Of course, expressing binary data as an
+ // array of integers is extremely inefficent. This can improved when v8
+ // bug 270 (http://code.google.com/p/v8/issues/detail?id=270) has been
+ // addressed.
if (args[0]->IsString()) {
- // utf8 encoding
+ // ASCII encoding
Local<String> s = args[0]->ToString();
size_t length = s->Utf8Length();
oi_buf *buf = new_buf(length);
- s->WriteUtf8(buf->base, length);
+ s->WriteAscii(buf->base, 0, length);
connection->Send(buf);
} else if (args[0]->IsArray()) {
static v8::Handle<v8::Value> v8New (const v8::Arguments& args);
static v8::Handle<v8::Value> v8Connect (const v8::Arguments& args);
static v8::Handle<v8::Value> v8Send (const v8::Arguments& args);
+ static v8::Handle<v8::Value> v8SendUtf8 (const v8::Arguments& args);
static v8::Handle<v8::Value> v8Close (const v8::Arguments& args);
static v8::Handle<v8::Value> v8FullClose (const v8::Arguments& args);
static v8::Handle<v8::Value> v8ForceClose (const v8::Arguments& args);