summaryrefslogtreecommitdiff
path: root/cpp/rubygen/framing.0-10/Session.rb
diff options
context:
space:
mode:
authorAlan Conway <aconway@apache.org>2008-11-06 22:40:57 +0000
committerAlan Conway <aconway@apache.org>2008-11-06 22:40:57 +0000
commit17716fee99670e49a1c3526a44c40d15757d94e3 (patch)
treea61a44820b9ee72d920a65f3d5683585b652fa76 /cpp/rubygen/framing.0-10/Session.rb
parent2de0473cf8c64e06396c5f5e6a0cf8b5e982514e (diff)
downloadqpid-python-17716fee99670e49a1c3526a44c40d15757d94e3.tar.gz
Add Message callbacks for async completion.
Add unit test for async completion. Add sync parameter to generated session functions, defaults as before but allows greater control. git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@711998 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/rubygen/framing.0-10/Session.rb')
-rw-r--r--cpp/rubygen/framing.0-10/Session.rb25
1 files changed, 19 insertions, 6 deletions
diff --git a/cpp/rubygen/framing.0-10/Session.rb b/cpp/rubygen/framing.0-10/Session.rb
index c77c11e1cf..5dd2a91a56 100644
--- a/cpp/rubygen/framing.0-10/Session.rb
+++ b/cpp/rubygen/framing.0-10/Session.rb
@@ -23,11 +23,12 @@ $: << '..'
require 'cppgen'
class CppGen
- def session_methods
+ def session_methods(sync_default)
excludes = ["connection", "session", "file", "stream"]
gen_methods=@amqp.methods_on(@chassis).reject { |m|
excludes.include? m.parent.name or m.body_name.include?("010")
}
+ gen_methods.each { |m| m.set_sync_default(sync_default) }
end
@@ -70,6 +71,8 @@ module SyncAsync
genl "return *this;"
}
end
+
+ def sync_default() !@async end
end
class ContentField # For extra content parameters
@@ -80,13 +83,23 @@ class ContentField # For extra content parameters
def doc() "Message content"; end
end
+class SyncField # For extra sync parameters
+ def initialize(default_value) @default_value=default_value ? "true" : "false" end
+ def cppname() "sync" end
+ def signature() "bool sync" end
+ def sig_default() signature+"="+@default_value end
+ def unpack() "p[arg::sync|#{@default_value}]"; end
+ def doc() "If true the broker will respond with completion status as soon as possible."; end
+end
+
class AmqpField
def unpack() "p[arg::#{cppname}|#{default_value}]"; end
def sig_default() signature+"="+default_value; end
end
class AmqpMethod
- def fields_c() content ? fields+[ContentField.new] : fields end
+ def set_sync_default(sync_default) @sync_default=sync_default end
+ def fields_c() result = fields + (content ? [ContentField.new] : []) + [SyncField.new(@sync_default)] end
def param_names_c() fields_c.map { |f| f.cppname} end
def signature_c() fields_c.map { |f| f.signature }; end
def sig_c_default() fields_c.map { |f| f.sig_default }; end
@@ -134,7 +147,7 @@ class SessionNoKeywordGen < CppGen
cpp_class(@classname, "public #{@version_base}") {
public
decl_ctor_opeq()
- session_methods.each { |m|
+ session_methods(sync_default).each { |m|
genl
doxygen(m)
args=m.sig_c_default.join(", ")
@@ -148,14 +161,14 @@ class SessionNoKeywordGen < CppGen
include "qpid/framing/all_method_bodies.h"
namespace(@namespace) {
genl "using namespace framing;"
- session_methods.each { |m|
+ session_methods(sync_default).each { |m|
genl
sig=m.signature_c.join(", ")
func="#{@classname}::#{m.session_function}"
scope("#{m.return_type(@async)} #{func}(#{sig}) {") {
args=(["ProtocolVersion(#{@amqp.major},#{@amqp.minor})"]+m.param_names).join(", ")
genl "#{m.body_name} body(#{args});";
- genl "body.setSync(#{@async ? 'false':'true'});"
+ genl "body.setSync(sync);"
sendargs="body"
sendargs << ", content" if m.content
async_retval="#{m.return_type(true)}(impl->send(#{sendargs}), impl)"
@@ -200,7 +213,7 @@ class SessionGen < CppGen
end
def generate()
- keyword_methods=session_methods.reject { |m| m.fields_c.empty? }
+ keyword_methods=session_methods(sync_default).reject { |m| m.fields_c.empty? }
max_arity = keyword_methods.map{ |m| m.fields_c.size }.max
h_file("qpid/client/arg.h") {