summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/client
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2007-08-21 15:51:41 +0000
committerGordon Sim <gsim@apache.org>2007-08-21 15:51:41 +0000
commitbb2883b9f5cfad0e028a9849ed91e36418a2d0ff (patch)
tree555686e2e819a875048610d88c2cee8e336b3687 /cpp/src/qpid/client
parent955d5ccb544ff4f56d35c40aa8934cbf4dfff14e (diff)
downloadqpid-python-bb2883b9f5cfad0e028a9849ed91e36418a2d0ff.tar.gz
Refresh of transitional xml to more closely reflect latest specification
Initial execution-result support (not yet handled on c++ client) Generation is now all done through the ruby code (it is a little slower at present I'm afraid, will try to speed it up over the next weeks) git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@568174 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/client')
-rw-r--r--cpp/src/qpid/client/ClientChannel.cpp22
-rw-r--r--cpp/src/qpid/client/ClientChannel.h5
-rw-r--r--cpp/src/qpid/client/Connection.h2
-rw-r--r--cpp/src/qpid/client/ExecutionHandler.cpp22
-rw-r--r--cpp/src/qpid/client/ExecutionHandler.h5
5 files changed, 43 insertions, 13 deletions
diff --git a/cpp/src/qpid/client/ClientChannel.cpp b/cpp/src/qpid/client/ClientChannel.cpp
index aa73e83328..d1cc4734eb 100644
--- a/cpp/src/qpid/client/ClientChannel.cpp
+++ b/cpp/src/qpid/client/ClientChannel.cpp
@@ -20,6 +20,7 @@
*/
#include "qpid/log/Statement.h"
#include <iostream>
+#include <sstream>
#include "ClientChannel.h"
#include "qpid/sys/Monitor.h"
#include "ClientMessage.h"
@@ -54,7 +55,8 @@ class ScopedSync
};
Channel::Channel(bool _transactional, u_int16_t _prefetch) :
- prefetch(_prefetch), transactional(_transactional), running(false)
+ prefetch(_prefetch), transactional(_transactional), running(false),
+ uniqueId(true)/*could eventually be the session id*/, nameCounter(0)
{
}
@@ -103,20 +105,22 @@ void Channel::deleteExchange(Exchange& exchange, bool synch){
}
void Channel::declareQueue(Queue& queue, bool synch){
+ if (queue.getName().empty()) {
+ stringstream uniqueName;
+ uniqueName << uniqueId << "-queue-" << ++nameCounter;
+ queue.setName(uniqueName.str());
+ }
+
FieldTable args;
ScopedSync s(*session, synch);
- Response r = session->queueDeclare(0, queue.getName(), empty, false/*passive*/, queue.isDurable(),
- queue.isExclusive(), queue.isAutoDelete(), !synch, args);
+ session->queueDeclare(0, queue.getName(), empty, false/*passive*/, queue.isDurable(),
+ queue.isExclusive(), queue.isAutoDelete(), args);
- if(synch) {
- if(queue.getName().length() == 0)
- queue.setName(r.as<QueueDeclareOkBody>().getQueue());
- }
}
void Channel::deleteQueue(Queue& queue, bool ifunused, bool ifempty, bool synch){
ScopedSync s(*session, synch);
- session->queueDelete(0, queue.getName(), ifunused, ifempty, !synch);
+ session->queueDelete(0, queue.getName(), ifunused, ifempty);
}
void Channel::bind(const Exchange& exchange, const Queue& queue, const std::string& key, const FieldTable& args, bool synch){
@@ -168,7 +172,7 @@ void Channel::cancel(const std::string& tag, bool synch) {
consumers.erase(i);
}
ScopedSync s(*session, synch);
- session->basicCancel(tag, !synch);
+ session->basicCancel(tag);
}
bool Channel::get(Message& msg, const Queue& queue, AckMode ackMode) {
diff --git a/cpp/src/qpid/client/ClientChannel.h b/cpp/src/qpid/client/ClientChannel.h
index 98e04db109..d73addc950 100644
--- a/cpp/src/qpid/client/ClientChannel.h
+++ b/cpp/src/qpid/client/ClientChannel.h
@@ -24,11 +24,12 @@
#include <memory>
#include <boost/scoped_ptr.hpp>
#include "qpid/framing/amqp_framing.h"
+#include "qpid/framing/Uuid.h"
#include "ClientExchange.h"
#include "ClientMessage.h"
#include "ClientQueue.h"
#include "ConnectionImpl.h"
-#include "Session.h"
+#include "qpid/client/Session.h"
#include "qpid/Exception.h"
#include "qpid/sys/Mutex.h"
#include "qpid/sys/Runnable.h"
@@ -83,6 +84,8 @@ class Channel : private sys::Runnable
SessionCore::shared_ptr sessionCore;
framing::ChannelId channelId;
BlockingQueue<ReceivedContent::shared_ptr> gets;
+ framing::Uuid uniqueId;
+ uint32_t nameCounter;
void stop();
diff --git a/cpp/src/qpid/client/Connection.h b/cpp/src/qpid/client/Connection.h
index e41ab363b5..e309b5c63e 100644
--- a/cpp/src/qpid/client/Connection.h
+++ b/cpp/src/qpid/client/Connection.h
@@ -26,7 +26,7 @@
#include "qpid/QpidError.h"
#include "ClientChannel.h"
#include "ConnectionImpl.h"
-#include "Session.h"
+#include "qpid/client/Session.h"
#include "qpid/framing/AMQP_HighestVersion.h"
diff --git a/cpp/src/qpid/client/ExecutionHandler.cpp b/cpp/src/qpid/client/ExecutionHandler.cpp
index 6ee6429b6b..6c2600d00b 100644
--- a/cpp/src/qpid/client/ExecutionHandler.cpp
+++ b/cpp/src/qpid/client/ExecutionHandler.cpp
@@ -78,7 +78,7 @@ void ExecutionHandler::handle(AMQFrame& frame)
}
}
-void ExecutionHandler::complete(uint32_t cumulative, SequenceNumberSet range)
+void ExecutionHandler::complete(uint32_t cumulative, const SequenceNumberSet& range)
{
SequenceNumber mark(cumulative);
if (outgoing.lwm < mark) {
@@ -101,6 +101,26 @@ void ExecutionHandler::flush()
incoming.lwm = incoming.hwm;
}
+void ExecutionHandler::noop()
+{
+ //do nothing
+}
+
+void ExecutionHandler::result(uint32_t /*command*/, const std::string& /*data*/)
+{
+ //TODO: need to signal the result to the appropriate listener
+}
+
+void ExecutionHandler::sync()
+{
+ //TODO: implement (the application is in charge of completion of
+ //some commands, so need to track completion for them).
+
+ //This shouldn't ever need to be called by the server (in my
+ //opinion) as the server never needs to synchronise with the
+ //clients execution
+}
+
void ExecutionHandler::sendFlush()
{
AMQFrame frame(version, 0, ExecutionFlushBody());
diff --git a/cpp/src/qpid/client/ExecutionHandler.h b/cpp/src/qpid/client/ExecutionHandler.h
index 21613df779..b409d5df7b 100644
--- a/cpp/src/qpid/client/ExecutionHandler.h
+++ b/cpp/src/qpid/client/ExecutionHandler.h
@@ -45,8 +45,11 @@ class ExecutionHandler :
framing::ProtocolVersion version;
uint64_t maxFrameSize;
- void complete(uint32_t mark, framing::SequenceNumberSet range);
+ void complete(uint32_t mark, const framing::SequenceNumberSet& range);
void flush();
+ void noop();
+ void result(uint32_t command, const std::string& data);
+ void sync();
public:
BlockingQueue<ReceivedContent::shared_ptr> received;