summaryrefslogtreecommitdiffstats
path: root/container-messagebus/src/main/java/com/yahoo/messagebus/jdisc/MbusRequestHandler.java
diff options
context:
space:
mode:
authorgjoranv <gv@verizonmedia.com>2021-03-29 21:14:20 +0200
committergjoranv <gv@verizonmedia.com>2021-03-29 21:14:20 +0200
commit2c7ee7bc9d3e588f11ce23d66f8c111109c8a2fc (patch)
tree148ff85b5ea211859cdc863ab24fe568060e78d0 /container-messagebus/src/main/java/com/yahoo/messagebus/jdisc/MbusRequestHandler.java
parent09cbb21dbfba2c80660945c84b1b2d9a0fffaf24 (diff)
Add source code from jdisc_mbus_service into container-messagebus.
Diffstat (limited to 'container-messagebus/src/main/java/com/yahoo/messagebus/jdisc/MbusRequestHandler.java')
-rw-r--r--container-messagebus/src/main/java/com/yahoo/messagebus/jdisc/MbusRequestHandler.java59
1 files changed, 59 insertions, 0 deletions
diff --git a/container-messagebus/src/main/java/com/yahoo/messagebus/jdisc/MbusRequestHandler.java b/container-messagebus/src/main/java/com/yahoo/messagebus/jdisc/MbusRequestHandler.java
new file mode 100644
index 00000000000..fb5657a9215
--- /dev/null
+++ b/container-messagebus/src/main/java/com/yahoo/messagebus/jdisc/MbusRequestHandler.java
@@ -0,0 +1,59 @@
+// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.messagebus.jdisc;
+
+import com.yahoo.jdisc.Request;
+import com.yahoo.jdisc.handler.AbstractRequestHandler;
+import com.yahoo.jdisc.handler.CompletionHandler;
+import com.yahoo.jdisc.handler.ContentChannel;
+import com.yahoo.jdisc.handler.ResponseHandler;
+import com.yahoo.messagebus.Message;
+import com.yahoo.messagebus.MessageHandler;
+import com.yahoo.messagebus.Reply;
+import com.yahoo.messagebus.ReplyHandler;
+
+/**
+ * @author Simon Thoresen Hult
+ */
+public abstract class MbusRequestHandler extends AbstractRequestHandler implements MessageHandler {
+
+ @Override
+ public ContentChannel handleRequest(final Request request, final ResponseHandler handler) {
+ if (!(request instanceof MbusRequest)) {
+ throw new UnsupportedOperationException("Expected MbusRequest, got " + request.getClass().getName() + ".");
+ }
+ final Message msg = ((MbusRequest)request).getMessage();
+ msg.pushHandler(new RespondingReplyHandler(handler));
+ handleMessage(msg);
+ return null;
+ }
+
+ private static class RespondingReplyHandler implements ReplyHandler {
+
+ private final ResponseHandler handler;
+
+ RespondingReplyHandler(final ResponseHandler handler) {
+ this.handler = handler;
+ }
+
+ @Override
+ public void handleReply(final Reply reply) {
+ final MbusResponse response = new MbusResponse(StatusCodes.fromMbusReply(reply), reply);
+ handler.handleResponse(response).close(IgnoringCompletionHandler.INSTANCE);
+ }
+ }
+
+ private static class IgnoringCompletionHandler implements CompletionHandler {
+
+ public static final IgnoringCompletionHandler INSTANCE = new IgnoringCompletionHandler();
+
+ @Override
+ public void completed() {
+
+ }
+
+ @Override
+ public void failed(final Throwable t) {
+
+ }
+ }
+}