if (message.type() == Type.REQUEST_1 && rawDataReply2 == null) {
responseMessage.type(Type.NOT_FOUND);
} else if (message.type() == Type.REQUEST_2 && objectDataReply2 == null) {
responseMessage.type(Type.NOT_FOUND);
} else {
final Buffer requestBuffer = message.buffer(0);
// the user can reply with null, indicating not found. Or
// returning the request buffer, which means nothing is
// returned. Or an exception can be thrown
if (message.type() == Type.REQUEST_1) {
LOG.debug("handling request1");
final Buffer replyBuffer = rawDataReply2.reply(message.sender(), requestBuffer,
message.isDone());
if (replyBuffer == null && message.isDone()) {
responseMessage.type(Type.NOT_FOUND);
} else if (replyBuffer != requestBuffer) {
// can be partial as well
if (!replyBuffer.isComplete()) {
responseMessage.streaming();
}
responseMessage.buffer(replyBuffer);
}
} else { // no streaming here when we deal with objects
Object obj = Utils.decodeJavaObject(requestBuffer.buffer());
LOG.debug("handling {}", obj);
Object reply = objectDataReply2.reply(message.sender(), obj);
if (reply == null) {
responseMessage.type(Type.NOT_FOUND);
} else if (reply == obj) {
responseMessage.type(Type.OK);
} else {
byte[] me = Utils.encodeJavaObject(reply);
responseMessage.buffer(new Buffer(Unpooled.wrappedBuffer(me)));
}
}
}
responder.response(responseMessage);
}