Make onError work for TCPConnection.
authorRyan <ry@tinyclouds.org>
Mon, 4 May 2009 14:36:57 +0000 (16:36 +0200)
committerRyan <ry@tinyclouds.org>
Mon, 4 May 2009 14:36:57 +0000 (16:36 +0200)
src/net.cc

index 17d2c68..253f73d 100644 (file)
@@ -206,9 +206,11 @@ Connection::AfterResolve (eio_req *req)
     return 0;
   }
 
-  // return error?
+  oi_error e;  // TODO better error!
+  connection->OnError(e);
 
-  return r | req->result;
+  return 0;
 }
 
 Handle<Value>
@@ -305,17 +307,24 @@ Connection::OnReceive (const void *buf, size_t len)
 void
 Connection::OnError (oi_error e)
 {
+  HandleScope scope;
+  Local<Object> protocol = GetProtocol();
+  Local<Value> callback_v = protocol->Get(ON_ERROR_SYMBOL);
+  if (!callback_v->IsFunction()) return;
+  Handle<Function> callback = Handle<Function>::Cast(callback_v);
+  // TODO call with error arg
+  callback->Call(protocol, 0, NULL);
 }
 
-#define DEFINE_SIMPLE_CALLBACK(name, symbol) \
-void name () \
-{ \
-  HandleScope scope; \
-  Local<Object> protocol = GetProtocol();\
-  Local<Value> callback_v = protocol->Get(symbol); \
-  if (!callback_v->IsFunction()) return; \
-  Handle<Function> callback = Handle<Function>::Cast(callback_v); \
-  callback->Call(protocol, 0, NULL); \
+#define DEFINE_SIMPLE_CALLBACK(name, symbol)                        \
+void name ()                                                        \
+{                                                                   \
+  HandleScope scope;                                                \
+  Local<Object> protocol = GetProtocol();                           \
+  Local<Value> callback_v = protocol->Get(symbol);                  \
+  if (!callback_v->IsFunction()) return;                            \
+  Handle<Function> callback = Handle<Function>::Cast(callback_v);   \
+  callback->Call(protocol, 0, NULL);                                \
 }
 
 DEFINE_SIMPLE_CALLBACK(Connection::OnConnect, ON_CONNECT_SYMBOL)
@@ -390,7 +399,7 @@ Acceptor::OnError (struct oi_error error)
 {
   HandleScope scope;
 
-  Local<Value> callback_v = handle_->Get(String::NewSymbol("onError"));
+  Local<Value> callback_v = handle_->Get(ON_ERROR_SYMBOL);
   if (!callback_v->IsFunction()) return;
   Local<Function> callback = Local<Function>::Cast(callback_v);
   callback->Call(handle_, 0, NULL); // TODO args