summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/framing/InputHandler.h
diff options
context:
space:
mode:
authorAlan Conway <aconway@apache.org>2007-06-27 21:19:14 +0000
committerAlan Conway <aconway@apache.org>2007-06-27 21:19:14 +0000
commit0efcf2c5c91f4927ccc00ad1cf391c2f964cc2e1 (patch)
treea9318ac4787cf588dd1329c2e557d8f870be20cc /cpp/src/qpid/framing/InputHandler.h
parent548abd065f91bc1f238ac98c24edf410edf10356 (diff)
downloadqpid-python-0efcf2c5c91f4927ccc00ad1cf391c2f964cc2e1.tar.gz
* src/qpid/framing/ChannelAdapter.cpp: Use handler chains
for in and outbound frames. * src/qpid/framing/InputHandler.h, OutputHandler.h, FrameHandler.h: All handlers pass AMQFrame& and have consistent memory management. Terminal OutputHandlers used to take ownership and delete frame, now they make a shallow copy instead. * src/qpid/framing/Handler.h, FrameHandler.h: Simplified. * src/qpid/client/ClientConnection.cpp: * src/qpid/broker/Connection.cpp: * src/qpid/broker/BrokerChannel.cpp: Update for ChannelAdapter changes. git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@551336 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/framing/InputHandler.h')
-rw-r--r--cpp/src/qpid/framing/InputHandler.h18
1 files changed, 16 insertions, 2 deletions
diff --git a/cpp/src/qpid/framing/InputHandler.h b/cpp/src/qpid/framing/InputHandler.h
index dc6814b849..48a96803da 100644
--- a/cpp/src/qpid/framing/InputHandler.h
+++ b/cpp/src/qpid/framing/InputHandler.h
@@ -21,7 +21,7 @@
*
*/
-#include "AMQFrame.h"
+#include "FrameHandler.h"
#include <boost/noncopyable.hpp>
namespace qpid {
@@ -30,7 +30,21 @@ namespace framing {
class InputHandler : private boost::noncopyable {
public:
virtual ~InputHandler() {}
- virtual void received(AMQFrame* frame) = 0;
+ virtual void received(AMQFrame&) = 0;
+};
+
+/** FrameHandler that delegates to an InputHandler */
+struct InputHandlerFrameHandler : public FrameHandler {
+ InputHandlerFrameHandler(InputHandler& in_) : in(in_) {}
+ void handle(ParamType frame) { in.received(frame); }
+ InputHandler& in;
+};
+
+/** InputHandler that delegates to a FrameHandler */
+struct FrameHandlerInputHandler : public InputHandler {
+ FrameHandlerInputHandler(shared_ptr<FrameHandler> h) : handler(h) {}
+ void received(AMQFrame& frame) { handler->handle(frame); }
+ FrameHandler::Chain handler;
};
}}