summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/client/Connector.h
diff options
context:
space:
mode:
authorAlan Conway <aconway@apache.org>2008-01-10 22:50:23 +0000
committerAlan Conway <aconway@apache.org>2008-01-10 22:50:23 +0000
commit6005ad88685a4bad8bdaa986a8b94fdffc51b31e (patch)
tree3f263060806fa3e4d92265c3e43e0eba3c829d7a /cpp/src/qpid/client/Connector.h
parent1b7c1ba40170027956d7df585eaae385d2511669 (diff)
downloadqpid-python-6005ad88685a4bad8bdaa986a8b94fdffc51b31e.tar.gz
Client always collects at least an entire frameset into a single buffer
when possible. Based on patch from Gordon Sim. - Refactor Connector::writebuff, ::send as Connector::Writer - Collect frames up to EOF notifying AIO write. - Encode all available complete framesets into buffers as compactly as possible. - Logging buffer size and frames encoded per write for client and broker. - framing::Buffer added getPosition(), getSize(), default ctor, copy ctor. git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@610972 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/client/Connector.h')
-rw-r--r--cpp/src/qpid/client/Connector.h30
1 files changed, 28 insertions, 2 deletions
diff --git a/cpp/src/qpid/client/Connector.h b/cpp/src/qpid/client/Connector.h
index b1d759569c..9897789901 100644
--- a/cpp/src/qpid/client/Connector.h
+++ b/cpp/src/qpid/client/Connector.h
@@ -45,6 +45,33 @@ namespace client {
class Connector : public framing::OutputHandler,
private sys::Runnable
{
+ struct Buff;
+
+ /** Batch up frames for writing to aio. */
+ class Writer : public framing::FrameHandler {
+ typedef sys::AsynchIO::BufferBase BufferBase;
+ typedef std::vector<framing::AMQFrame> Frames;
+
+ sys::Mutex lock;
+ sys::AsynchIO* aio;
+ BufferBase* buffer;
+ Frames frames;
+ Frames::iterator lastEof; // Points after last EOF in frames
+ framing::Buffer encode;
+ size_t framesEncoded;
+
+ void writeOne(const sys::Mutex::ScopedLock&);
+ void newBuffer(const sys::Mutex::ScopedLock&);
+
+ public:
+
+ Writer();
+ ~Writer();
+ void setAio(sys::AsynchIO*);
+ void handle(framing::AMQFrame&);
+ void write(sys::AsynchIO&);
+ };
+
const bool debug;
const int receive_buffer_size;
const int send_buffer_size;
@@ -65,8 +92,7 @@ class Connector : public framing::OutputHandler,
framing::InitiationHandler* initialiser;
framing::OutputHandler* output;
- sys::Mutex writeLock;
- std::queue<framing::AMQFrame> writeFrameQueue;
+ Writer writer;
sys::Thread receiver;