diff options
author | Alan Conway <aconway@apache.org> | 2008-11-06 22:40:57 +0000 |
---|---|---|
committer | Alan Conway <aconway@apache.org> | 2008-11-06 22:40:57 +0000 |
commit | 17716fee99670e49a1c3526a44c40d15757d94e3 (patch) | |
tree | a61a44820b9ee72d920a65f3d5683585b652fa76 /cpp/rubygen/framing.0-10/Session.rb | |
parent | 2de0473cf8c64e06396c5f5e6a0cf8b5e982514e (diff) | |
download | qpid-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.rb | 25 |
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") { |