From 0efcf2c5c91f4927ccc00ad1cf391c2f964cc2e1 Mon Sep 17 00:00:00 2001 From: Alan Conway Date: Wed, 27 Jun 2007 21:19:14 +0000 Subject: * 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 --- cpp/src/qpid/framing/OutputHandler.h | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'cpp/src/qpid/framing/OutputHandler.h') diff --git a/cpp/src/qpid/framing/OutputHandler.h b/cpp/src/qpid/framing/OutputHandler.h index 9ffd4227d8..89917ac3df 100644 --- a/cpp/src/qpid/framing/OutputHandler.h +++ b/cpp/src/qpid/framing/OutputHandler.h @@ -22,17 +22,32 @@ * */ #include +#include "FrameHandler.h" namespace qpid { namespace framing { -class AMQFrame; class OutputHandler : private boost::noncopyable { public: virtual ~OutputHandler() {} - virtual void send(AMQFrame* frame) = 0; + virtual void send(AMQFrame&) = 0; }; +/** OutputHandler that delegates to a FrameHandler */ +struct FrameHandlerOutputHandler : public OutputHandler { + FrameHandlerOutputHandler(shared_ptr h) : handler(h) {} + void received(AMQFrame& frame) { handler->handle(frame); } + FrameHandler::Chain handler; +}; + +/** FrameHandler that delegates to an OutputHandler */ +struct OutputHandlerFrameHandler : public FrameHandler { + OutputHandlerFrameHandler(OutputHandler& out_) : out(out_) {} + void handle(ParamType frame) { out.send(frame); } + OutputHandler& out; +}; + + }} -- cgit v1.2.1