warn user when they forget register generic service

pull/4714/head
yang-g 9 years ago
parent c021c9be5b
commit 1ac6f4594e
  1. 16
      include/grpc++/impl/service_type.h
  2. 9
      src/cpp/server/server_builder.cc

@ -82,6 +82,15 @@ class Service {
return false;
}
bool has_generic_methods() const {
for (auto it = methods_.begin(); it != methods_.end(); ++it) {
if ((*it)->get() == nullptr) {
return true;
}
}
return false;
}
protected:
template <class Message>
void RequestAsyncUnary(int index, ServerContext* context, Message* request,
@ -122,16 +131,15 @@ class Service {
void MarkMethodAsync(int index) {
if (methods_[index].get() == nullptr) {
gpr_log(GPR_ERROR, "A method cannot be marked async and generic.");
abort();
gpr_log(GPR_ERROR, "Method already marked generic.");
return;
}
methods_[index]->ResetHandler();
}
void MarkMethodGeneric(int index) {
if (methods_[index]->handler() == nullptr) {
gpr_log(GPR_ERROR, "A method cannot be marked async and generic.");
abort();
gpr_log(GPR_ERROR, "Method already marked async.");
}
methods_[index].reset();
}

@ -117,6 +117,15 @@ std::unique_ptr<Server> ServerBuilder::BuildAndStart() {
}
if (generic_service_) {
server->RegisterAsyncGenericService(generic_service_);
} else {
for (auto it = services_.begin(); it != services_.end(); ++it) {
if ((*it)->service->has_generic_methods()) {
gpr_log(GPR_ERROR,
"Some methods were marked generic but there is no "
"generic service registered.");
return nullptr;
}
}
}
for (auto port = ports_.begin(); port != ports_.end(); port++) {
int r = server->AddListeningPort(port->addr, port->creds.get());

Loading…
Cancel
Save