From b33a63b36c659a894143382d0a61efe6a598fcc6 Mon Sep 17 00:00:00 2001 From: Gordon Sim Date: Thu, 6 Sep 2007 20:27:33 +0000 Subject: Implementation of execution.result on the client side git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@573359 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/rubygen/templates/Session.rb | 64 ++++++++++++++++++++++------------------ cpp/rubygen/templates/structs.rb | 12 +++----- 2 files changed, 39 insertions(+), 37 deletions(-) (limited to 'cpp/rubygen') diff --git a/cpp/rubygen/templates/Session.rb b/cpp/rubygen/templates/Session.rb index 95b10c6dbf..4cea9f9665 100644 --- a/cpp/rubygen/templates/Session.rb +++ b/cpp/rubygen/templates/Session.rb @@ -12,8 +12,18 @@ class SessionGen < CppGen @classname="Session" end + def return_type(m) + if (m.result) + return "TypedResult" + elsif (not m.responses().empty?) + return "Response" + else + return "Completion" + end + end + def declare_method (m) - gen "Response #{m.parent.name.lcaps}#{m.name.caps}(" + gen "#{return_type(m)} #{m.parent.name.lcaps}#{m.name.caps}(" if (m.content()) params=m.signature + ["const MethodContent& content"] else @@ -28,7 +38,7 @@ class SessionGen < CppGen end def define_method (m) - gen "Response Session::#{m.parent.name.lcaps}#{m.name.caps}(" + gen "#{return_type(m)} Session::#{m.parent.name.lcaps}#{m.name.caps}(" if (m.content()) params=m.signature + ["const MethodContent& content"] else @@ -37,19 +47,15 @@ class SessionGen < CppGen indent { gen params.join(",\n") } gen "){\n\n" indent (2) { - gen "return impl->send(#{m.body_name}(" + gen "return #{return_type(m)}(impl()->send(#{m.body_name}(" params = ["version"] + m.param_names gen params.join(", ") other_params=[] if (m.content()) - other_params << "content" + gen "), content), impl());\n" + else + gen ")), impl());\n" end - if m.responses().empty? - other_params << "false" - else - other_params << "true" - end - gen "), #{other_params.join(", ")});\n" } gen "}\n\n" end @@ -65,11 +71,13 @@ class SessionGen < CppGen gen < #include "qpid/framing/amqp_framing.h" +#include "qpid/framing/amqp_structs.h" #include "qpid/framing/ProtocolVersion.h" #include "qpid/framing/MethodContent.h" #include "qpid/client/ConnectionImpl.h" #include "qpid/client/Response.h" -#include "qpid/client/SessionCore.h" +#include "qpid/client/ScopedAssociation.h" +#include "qpid/client/TypedResult.h" namespace qpid { namespace client { @@ -81,16 +89,20 @@ using framing::MethodContent; using framing::SequenceNumberSet; class #{@classname} { - ConnectionImpl::shared_ptr parent; - SessionCore::shared_ptr impl; + ScopedAssociation::shared_ptr assoc; framing::ProtocolVersion version; + + SessionCore::shared_ptr impl(); + public: - #{@classname}(ConnectionImpl::shared_ptr, SessionCore::shared_ptr); - ~#{@classname}(); + #{@classname}(); + #{@classname}(ScopedAssociation::shared_ptr); - framing::FrameSet::shared_ptr get() { return impl->get(); } - void setSynchronous(bool sync) { impl->setSync(sync); } + framing::FrameSet::shared_ptr get() { return impl()->get(); } + void setSynchronous(bool sync) { impl()->setSync(sync); } void close(); + Execution& execution() { return impl()->getExecution(); } + EOS indent { @amqp.classes.each { |c| declare_class(c) if !excludes.include?(c.name) } } gen <stop(); - if (parent) { - parent->released(impl); - parent.reset(); - } + if (!assoc) throw Exception("Uninitialised session"); + return assoc->session; } void #{@classname}::close() { - impl->close(); - if (parent) { - parent->released(impl); - parent.reset(); - } + impl()->close(); } EOS diff --git a/cpp/rubygen/templates/structs.rb b/cpp/rubygen/templates/structs.rb index fd949eb53d..363fe4ec35 100644 --- a/cpp/rubygen/templates/structs.rb +++ b/cpp/rubygen/templates/structs.rb @@ -117,19 +117,15 @@ class StructGen < CppGen end def methodbody_extra_defs(s) - if (s.content) - content = "true" - else - content = "false" - end - gen <