From e183227707d150b1f42e750df0e90cd7dac8744e Mon Sep 17 00:00:00 2001 From: Alan Conway Date: Wed, 29 Aug 2007 23:27:40 +0000 Subject: * src/qpid/broker/Session.h, .cpp: Session holds all state of a session including handlers created for that session. Session is not directly associated with a channel. * src/qpid/broker/SessionAdapter.h, .cpp: SessionAdapter is bound to a channel managed by the Connection. It can be attached to and detatched from a Session. * src/qpid/broker/Connection.cpp, .h: Use SessionAdapter. * src/qpid/framing/Handler.h: Removed use of shared_ptr. Handlers belong either to a Session or a Connection and are destroyed with it. * src/qpid/framing/InputHandler.h, OutputHandler.h: Both now inherit from FrameHandler and can be used as FrameHandlers. Intermediate step to removing them entirely. * src/qpid/broker/ConnectionAdapter.h: * src/qpid/client/ConnectionHandler.h: * src/qpid/framing/ChannelAdapter.cpp, .h: Minor changes required by Handler changes. git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@570982 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qpid/framing/ChannelAdapter.cpp | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) (limited to 'cpp/src/qpid/framing/ChannelAdapter.cpp') diff --git a/cpp/src/qpid/framing/ChannelAdapter.cpp b/cpp/src/qpid/framing/ChannelAdapter.cpp index 86b60d896b..027679228a 100644 --- a/cpp/src/qpid/framing/ChannelAdapter.cpp +++ b/cpp/src/qpid/framing/ChannelAdapter.cpp @@ -31,28 +31,24 @@ using boost::format; namespace qpid { namespace framing { -/** Framehandler that feeds into the channel. */ -struct ChannelAdapter::ChannelAdapterHandler : public FrameHandler { - ChannelAdapterHandler(ChannelAdapter& channel_) : channel(channel_) {} - void handle(AMQFrame& frame) { channel.handleBody(frame.getBody()); } - ChannelAdapter& channel; -}; +ChannelAdapter::Handler::Handler(ChannelAdapter& c) : parent(c) {} +void ChannelAdapter::Handler::handle(AMQFrame& f) { parent.handleBody(f.getBody()); } -void ChannelAdapter::init(ChannelId i, OutputHandler& out, ProtocolVersion v) +ChannelAdapter::ChannelAdapter() : handler(*this), id(0) {} + +void ChannelAdapter::init(ChannelId i, OutputHandler& out, ProtocolVersion v) { assertChannelNotOpen(); id = i; version = v; - - handlers.in = make_shared_ptr(new ChannelAdapterHandler(*this)); - handlers.out= make_shared_ptr(new OutputHandlerFrameHandler(out)); + handlers.reset(&handler, &out); } void ChannelAdapter::send(const AMQBody& body) { assertChannelOpen(); AMQFrame frame(getId(), body); - handlers.out->handle(frame); + handlers.out(frame); } void ChannelAdapter::assertMethodOk(AMQMethodBody& method) const { @@ -73,4 +69,6 @@ void ChannelAdapter::assertChannelNotOpen() const { 504, format("Channel %d is already open.") % getId()); } +void ChannelAdapter::handle(AMQFrame& f) { handleBody(f.getBody()); } + }} // namespace qpid::framing -- cgit v1.2.1