|
|
|
@ -112,9 +112,17 @@ class NewCallOp : public Op { |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
Server::Server(grpc_server *server) : wrapped_server(server) {} |
|
|
|
|
Server::Server(grpc_server *server) : wrapped_server(server) { |
|
|
|
|
shutdown_queue = grpc_completion_queue_create(); |
|
|
|
|
grpc_server_register_completion_queue(server, shutdown_queue); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Server::~Server() { grpc_server_destroy(wrapped_server); } |
|
|
|
|
Server::~Server() { |
|
|
|
|
this->ShutdownServer(); |
|
|
|
|
grpc_completion_queue_shutdown(this->shutdown_queue); |
|
|
|
|
grpc_server_destroy(wrapped_server); |
|
|
|
|
grpc_completion_queue_destroy(this->shutdown_queue); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void Server::Init(Handle<Object> exports) { |
|
|
|
|
NanScope(); |
|
|
|
@ -148,6 +156,16 @@ bool Server::HasInstance(Handle<Value> val) { |
|
|
|
|
return NanHasInstance(fun_tpl, val); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void Server::ShutdownServer() { |
|
|
|
|
if (this->wrapped_server != NULL) { |
|
|
|
|
grpc_server_shutdown_and_notify(this->wrapped_server, |
|
|
|
|
this->shutdown_queue, |
|
|
|
|
NULL); |
|
|
|
|
grpc_completion_queue_pluck(this->shutdown_queue, NULL, gpr_inf_future); |
|
|
|
|
this->wrapped_server = NULL; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
NAN_METHOD(Server::New) { |
|
|
|
|
NanScope(); |
|
|
|
|
|
|
|
|
@ -207,6 +225,9 @@ NAN_METHOD(Server::RequestCall) { |
|
|
|
|
return NanThrowTypeError("requestCall can only be called on a Server"); |
|
|
|
|
} |
|
|
|
|
Server *server = ObjectWrap::Unwrap<Server>(args.This()); |
|
|
|
|
if (server->wrapped_server == NULL) { |
|
|
|
|
return NanThrowError("requestCall cannot be called on a shut down Server"); |
|
|
|
|
} |
|
|
|
|
NewCallOp *op = new NewCallOp(); |
|
|
|
|
unique_ptr<OpVec> ops(new OpVec()); |
|
|
|
|
ops->push_back(unique_ptr<Op>(op)); |
|
|
|
@ -232,6 +253,9 @@ NAN_METHOD(Server::AddHttp2Port) { |
|
|
|
|
return NanThrowTypeError("addHttp2Port's argument must be a String"); |
|
|
|
|
} |
|
|
|
|
Server *server = ObjectWrap::Unwrap<Server>(args.This()); |
|
|
|
|
if (server->wrapped_server == NULL) { |
|
|
|
|
return NanThrowError("addHttp2Port cannot be called on a shut down Server"); |
|
|
|
|
} |
|
|
|
|
NanReturnValue(NanNew<Number>(grpc_server_add_http2_port( |
|
|
|
|
server->wrapped_server, *NanUtf8String(args[0])))); |
|
|
|
|
} |
|
|
|
@ -251,6 +275,10 @@ NAN_METHOD(Server::AddSecureHttp2Port) { |
|
|
|
|
"addSecureHttp2Port's second argument must be ServerCredentials"); |
|
|
|
|
} |
|
|
|
|
Server *server = ObjectWrap::Unwrap<Server>(args.This()); |
|
|
|
|
if (server->wrapped_server == NULL) { |
|
|
|
|
return NanThrowError( |
|
|
|
|
"addSecureHttp2Port cannot be called on a shut down Server"); |
|
|
|
|
} |
|
|
|
|
ServerCredentials *creds = ObjectWrap::Unwrap<ServerCredentials>( |
|
|
|
|
args[1]->ToObject()); |
|
|
|
|
NanReturnValue(NanNew<Number>(grpc_server_add_secure_http2_port( |
|
|
|
@ -264,17 +292,24 @@ NAN_METHOD(Server::Start) { |
|
|
|
|
return NanThrowTypeError("start can only be called on a Server"); |
|
|
|
|
} |
|
|
|
|
Server *server = ObjectWrap::Unwrap<Server>(args.This()); |
|
|
|
|
if (server->wrapped_server == NULL) { |
|
|
|
|
return NanThrowError("start cannot be called on a shut down Server"); |
|
|
|
|
} |
|
|
|
|
grpc_server_start(server->wrapped_server); |
|
|
|
|
NanReturnUndefined(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
NAN_METHOD(ShutdownCallback) { |
|
|
|
|
NanReturnUndefined(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
NAN_METHOD(Server::Shutdown) { |
|
|
|
|
NanScope(); |
|
|
|
|
if (!HasInstance(args.This())) { |
|
|
|
|
return NanThrowTypeError("shutdown can only be called on a Server"); |
|
|
|
|
} |
|
|
|
|
Server *server = ObjectWrap::Unwrap<Server>(args.This()); |
|
|
|
|
grpc_server_shutdown(server->wrapped_server); |
|
|
|
|
server->ShutdownServer(); |
|
|
|
|
NanReturnUndefined(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|