}
}
private void doRequest(RpcMessage message) {
Service service = services.get(message.getService());
Builder errorBuilder = RpcMessage.newBuilder().setType(MessageType.ERROR);
boolean succeed = false;
if (service != null) {
MethodDescriptor method = service.getDescriptorForType()
.findMethodByName(message.getMethod());
if (method != null) {
Message request = fromByteString(service.getRequestPrototype(method),
message.getRequest());
if (request != null) {
final long id = message.getId();
RpcCallback<Message> done = new RpcCallback<Message>() {
@Override
public void run(Message response) {
done(response, id);
}
};
succeed = doCall(request, service, method, done);
} else {
errorBuilder.setError(ErrorCode.INVALID_REQUEST);
}
} else {
errorBuilder.setError(ErrorCode.NO_METHOD);
}
} else {
errorBuilder.setError(ErrorCode.NO_SERVICE);
}
if (!succeed) {
RpcMessage resp = errorBuilder.build();
channel.write(resp);
}
}