Skip to content

Instantly share code, notes, and snippets.

@InfoSec812
Created August 22, 2017 14:42
Show Gist options
  • Save InfoSec812/810d99e69766b83f0d88737f6508e4fa to your computer and use it in GitHub Desktop.
Save InfoSec812/810d99e69766b83f0d88737f6508e4fa to your computer and use it in GitHub Desktop.
Example of Vert.x Verticle using method references.
package org.rantue.server;
import io.netty.handler.codec.http.HttpResponseStatus;
import io.vertx.core.AbstractVerticle;
import io.vertx.core.AsyncResult;
import io.vertx.core.Future;
import io.vertx.core.Handler;
import io.vertx.core.buffer.Buffer;
import io.vertx.core.eventbus.Message;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.web.Router;
import io.vertx.ext.web.RoutingContext;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import static io.netty.handler.codec.http.HttpResponseStatus.INTERNAL_SERVER_ERROR;
import static io.netty.handler.codec.http.HttpResponseStatus.NOT_FOUND;
import static io.netty.handler.codec.http.HttpResponseStatus.OK;
public class CallbackVerticle extends AbstractVerticle {
@Override
public void start(Future startFuture) {
Router router = Router.router(vertx);
router.get("/customer").handler(this::handleRequest);
vertx.createHttpServer().requestHandler(router::accept).listen(8080, startFuture.completer());
}
private void handleRequest(final RoutingContext ctx) {
Handler<AsyncResult<Message<Object>>> handler = reply -> this.handleMessageReply(ctx, reply);
vertx.eventBus().send("some.address", new JsonObject(), handler);
}
private void handleMessageReply(final RoutingContext ctx, final AsyncResult<Message<Object>> reply) {
if (reply.succeeded()) {
JsonObject body = (JsonObject) reply.result();
Handler<AsyncResult<Buffer>> handler = fileRes -> this.handleFileRead(ctx, fileRes);
vertx.fileSystem().readFile(body.getString("fileName"), handler);
} else {
ctx.response()
.setStatusMessage(INTERNAL_SERVER_ERROR.reasonPhrase())
.setStatusCode(INTERNAL_SERVER_ERROR.code())
.end();
}
}
private void handleFileRead(final RoutingContext ctx, final AsyncResult<Buffer> fileRes) {
if (fileRes.succeeded()) {
ctx.response()
.setStatusCode(OK.code())
.setStatusMessage(OK.reasonPhrase())
.end(fileRes.result());
} else {
ctx.response()
.setStatusMessage(NOT_FOUND.reasonPhrase())
.setStatusCode(NOT_FOUND.code())
.end();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment