Skip to content
This repository has been archived by the owner on Apr 22, 2023. It is now read-only.

Commit

Permalink
Clean ups
Browse files Browse the repository at this point in the history
  • Loading branch information
ry committed Jun 17, 2009
1 parent b3b6f8c commit 27b268b
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 56 deletions.
6 changes: 3 additions & 3 deletions src/net.h
Expand Up @@ -33,7 +33,9 @@ class Connection : public ObjectWrap {
Connection (v8::Handle<v8::Object> handle); Connection (v8::Handle<v8::Object> handle);
virtual ~Connection (); virtual ~Connection ();


int Connect (struct addrinfo *address) { return oi_socket_connect (&socket_, address); } int Connect (struct addrinfo *address) {
return oi_socket_connect (&socket_, address);
}
void Send (oi_buf *buf) { oi_socket_write(&socket_, buf); } void Send (oi_buf *buf) { oi_socket_write(&socket_, buf); }
void Close (void) { oi_socket_close(&socket_); } void Close (void) { oi_socket_close(&socket_); }
void FullClose (void) { oi_socket_full_close(&socket_); } void FullClose (void) { oi_socket_full_close(&socket_); }
Expand Down Expand Up @@ -66,12 +68,10 @@ class Connection : public ObjectWrap {


static void on_read (oi_socket *s, const void *buf, size_t len) { static void on_read (oi_socket *s, const void *buf, size_t len) {
Connection *connection = static_cast<Connection*> (s->data); Connection *connection = static_cast<Connection*> (s->data);
v8::V8::ResumeProfiler();
if (len == 0) if (len == 0)
connection->OnEOF(); connection->OnEOF();
else else
connection->OnReceive(buf, len); connection->OnReceive(buf, len);
v8::V8::PauseProfiler();
} }


static void on_drain (oi_socket *s) { static void on_drain (oi_socket *s) {
Expand Down
104 changes: 54 additions & 50 deletions src/node.cc
Expand Up @@ -280,93 +280,97 @@ ExecuteNativeJS (const char *filename, const char *data)
} }
} }


int static Local<Object>
main (int argc, char *argv[]) Load (int argc, char *argv[])
{ {
ev_default_loop(EVFLAG_AUTO); // initialize the default ev loop. HandleScope scope;

// start eio thread pool
ev_async_init(&eio_watcher, node_eio_cb);
eio_init(eio_want_poll, NULL);

V8::SetFlagsFromCommandLine(&argc, argv, true);
V8::Initialize();

if(argc < 2) {
fprintf(stderr, "No script was specified.\n");
return 1;
}

string filename(argv[1]);

HandleScope handle_scope;

Persistent<Context> context = Context::New(NULL, ObjectTemplate::New());
Context::Scope context_scope(context);
V8::SetFatalErrorHandler(OnFatalError);

Local<Object> g = Context::GetCurrent()->Global();

V8::PauseProfiler(); // to be resumed in Connection::on_read


Local<Object> node = Object::New(); Local<Object> global_obj = Context::GetCurrent()->Global();
g->Set(String::New("node"), node); Local<Object> node_obj = Object::New();


NODE_SET_METHOD(node, "compile", compile); // internal global_obj->Set(String::NewSymbol("node"), node_obj);
NODE_SET_METHOD(node, "debug", debug);
NODE_SET_METHOD(node, "reallyExit", node_exit);


Local<Array> arguments = Array::New(argc); Local<Array> arguments = Array::New(argc);
for (int i = 0; i < argc; i++) { for (int i = 0; i < argc; i++) {
Local<String> arg = String::New(argv[i]); Local<String> arg = String::New(argv[i]);
arguments->Set(Integer::New(i), arg); arguments->Set(Integer::New(i), arg);
} }
g->Set(String::New("ARGV"), arguments); global_obj->Set(String::NewSymbol("ARGV"), arguments);


// BUILT-IN MODULES NODE_SET_METHOD(node_obj, "compile", compile);
Timer::Initialize(node); NODE_SET_METHOD(node_obj, "debug", debug);
NODE_SET_METHOD(node_obj, "reallyExit", node_exit);

Timer::Initialize(node_obj);


Local<Object> constants = Object::New(); Local<Object> constants = Object::New();
node->Set(String::New("constants"), constants); node_obj->Set(String::NewSymbol("constants"), constants);
DefineConstants(constants); DefineConstants(constants);


Local<Object> fs = Object::New(); Local<Object> fs = Object::New();
node->Set(String::New("fs"), fs); node_obj->Set(String::NewSymbol("fs"), fs);
File::Initialize(fs); File::Initialize(fs);


Local<Object> tcp = Object::New(); Local<Object> tcp = Object::New();
node->Set(String::New("tcp"), tcp); node_obj->Set(String::New("tcp"), tcp);
Acceptor::Initialize(tcp); Acceptor::Initialize(tcp);
Connection::Initialize(tcp); Connection::Initialize(tcp);


Local<Object> http = Object::New(); Local<Object> http = Object::New();
node->Set(String::New("http"), http); node_obj->Set(String::New("http"), http);
HTTPServer::Initialize(http); HTTPServer::Initialize(http);
HTTPConnection::Initialize(http); HTTPConnection::Initialize(http);


ExecuteNativeJS("http.js", native_http); ExecuteNativeJS("http.js", native_http);
ExecuteNativeJS("file.js", native_file); ExecuteNativeJS("file.js", native_file);
ExecuteNativeJS("node.js", native_node); ExecuteNativeJS("node.js", native_node);


ev_loop(EV_DEFAULT_UC_ 0); return scope.Close(node_obj);
}


// call node.exit() static void
Local<Value> exit_v = node->Get(String::New("exit")); CallExitHandler (Handle<Object> node_obj)
{
HandleScope scope;
Local<Value> exit_v = node_obj->Get(String::New("exit"));
assert(exit_v->IsFunction()); assert(exit_v->IsFunction());
Handle<Function> exit_f = Handle<Function>::Cast(exit_v); Handle<Function> exit_f = Handle<Function>::Cast(exit_v);
TryCatch try_catch; TryCatch try_catch;
exit_f->Call(g, 0, NULL); exit_f->Call(Context::GetCurrent()->Global(), 0, NULL);
if (try_catch.HasCaught()) if (try_catch.HasCaught())
node::FatalException(try_catch); node::FatalException(try_catch);
}

int
main (int argc, char *argv[])
{
ev_default_loop(EVFLAG_AUTO); // initialize the default ev loop.

// start eio thread pool
ev_async_init(&eio_watcher, node_eio_cb);
eio_init(eio_want_poll, NULL);

V8::SetFlagsFromCommandLine(&argc, argv, true);
V8::Initialize();
V8::SetFatalErrorHandler(OnFatalError);

if(argc < 2) {
fprintf(stderr, "No script was specified.\n");
return 1;
}

HandleScope handle_scope;
Persistent<Context> context = Context::New(NULL, ObjectTemplate::New());
Context::Scope context_scope(context);

Local<Object> node_obj = Load(argc, argv);

ev_loop(EV_DEFAULT_UC_ 0); // main event loop

CallExitHandler(node_obj);


context.Dispose(); context.Dispose();
// The following line when uncommented causes an error. V8::Dispose();
// To reproduce do this:
// > node --prof test-http_simple.js
//
// > curl http://localhost:8000/quit/
//
//V8::Dispose();


return 0; return 0;
} }
4 changes: 1 addition & 3 deletions website/index.html
Expand Up @@ -194,9 +194,7 @@ <h2 id="build">Build</h2>


<p>To run the tests</p> <p>To run the tests</p>


<pre class="sh_none"> <pre class="sh_none">make test</pre>
./configure --debug
make test</pre>


<h2 id="community">Community</h2> <h2 id="community">Community</h2>
<p> <p>
Expand Down

0 comments on commit 27b268b

Please sign in to comment.