diff options
| author | Ted Ross <tross@apache.org> | 2009-09-02 12:32:56 +0000 |
|---|---|---|
| committer | Ted Ross <tross@apache.org> | 2009-09-02 12:32:56 +0000 |
| commit | 5781e67cca8d07d481797946c217e738264f6d23 (patch) | |
| tree | 4874c87e651077cd45c1d673aec8b55bdda6e971 /cpp/bindings | |
| parent | 016233ea124849d8402fc49819387478cfdff942 (diff) | |
| download | qpid-python-5781e67cca8d07d481797946c217e738264f6d23.tar.gz | |
More QMF implementation:
- Added schema handling and exchange to the console
- Improved the connection performance by switching to pre-acquired mode
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@810482 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/bindings')
| -rw-r--r-- | cpp/bindings/qmf/ruby/qmf.rb | 89 | ||||
| -rwxr-xr-x | cpp/bindings/qmf/tests/ruby_console.rb | 20 |
2 files changed, 92 insertions, 17 deletions
diff --git a/cpp/bindings/qmf/ruby/qmf.rb b/cpp/bindings/qmf/ruby/qmf.rb index 2df6e8646d..21fbf6c157 100644 --- a/cpp/bindings/qmf/ruby/qmf.rb +++ b/cpp/bindings/qmf/ruby/qmf.rb @@ -26,7 +26,7 @@ module Qmf # Pull all the TYPE_* constants into Qmf namespace. Maybe there's an easier way? Qmfengine.constants.each do |c| - if c.index('TYPE_') == 0 or c.index('ACCESS_') == 0 or c.index('DIR_') == 0 + if c.index('TYPE_') == 0 or c.index('ACCESS_') == 0 or c.index('DIR_') == 0 or c.index('CLASS_') == 0 const_set(c, Qmfengine.const_get(c)) end end @@ -81,8 +81,8 @@ module Qmf @impl = Qmfengine::ResilientConnection.new(settings.impl) @sockEngine, @sock = Socket::socketpair(Socket::PF_UNIX, Socket::SOCK_STREAM, 0) @impl.setNotifyFd(@sockEngine.fileno) - @new_conn_handlers = Array.new - @conn_handlers = Array.new + @new_conn_handlers = [] + @conn_handlers = [] @thread = Thread.new do run @@ -91,7 +91,7 @@ module Qmf def add_conn_handler(handler) synchronize do - @new_conn_handlers.push(handler) + @new_conn_handlers << handler end @sockEngine.write("x") end @@ -107,11 +107,11 @@ module Qmf synchronize do new_handlers = @new_conn_handlers - @new_conn_handlers = Array.new + @new_conn_handlers = [] end new_handlers.each do |nh| - @conn_handlers.push(nh) + @conn_handlers << nh nh.conn_event_connected() if connected end new_handlers = nil @@ -466,11 +466,15 @@ module Qmf class SchemaObjectClass attr_reader :impl - def initialize(package, name, kwargs={}) - @impl = Qmfengine::SchemaObjectClass.new(package, name) + def initialize(package='', name='', kwargs={}) @properties = [] @statistics = [] @methods = [] + if kwargs.include?(:impl) + @impl = kwargs[:impl] + else + @impl = Qmfengine::SchemaObjectClass.new(package, name) + end end def add_property(prop) @@ -489,7 +493,7 @@ module Qmf end def name - @impl.getName + @impl.getClassKey.getClassName end def properties @@ -505,16 +509,24 @@ module Qmf class SchemaEventClass attr_reader :impl - def initialize(package, name, kwargs={}) - @impl = Qmfengine::SchemaEventClass.new(package, name) - @impl.setDesc(kwargs[:desc]) if kwargs.include?(:desc) + def initialize(package='', name='', kwargs={}) @arguments = [] + if kwargs.include?(:impl) + @impl = kwargs[:impl] + else + @impl = Qmfengine::SchemaEventClass.new(package, name) + @impl.setDesc(kwargs[:desc]) if kwargs.include?(:desc) + end end def add_argument(arg) @arguments << arg @impl.addArgument(arg.impl) end + + def name + @impl.getClassKey.getClassName + end end ##============================================================================== @@ -540,12 +552,12 @@ module Qmf @handler = handler @impl = Qmfengine::ConsoleEngine.new @event = Qmfengine::ConsoleEvent.new - @broker_list = Array.new + @broker_list = [] end def add_connection(conn) broker = Broker.new(self, conn) - @broker_list.push(broker) + @broker_list << broker return broker end @@ -553,9 +565,30 @@ module Qmf end def get_packages() - end + plist = [] + count = @impl.packageCount + for i in 0...count + plist << @impl.getPackageName(i) + end + return plist + end + + def get_classes(package, kind=CLASS_OBJECT) + clist = [] + count = @impl.classCount(package) + for i in 0...count + key = @impl.getClass(package, i) + class_kind = @impl.getClassKind(key) + if class_kind == kind + if kind == CLASS_OBJECT + clist << SchemaObjectClass.new('', '', :impl => @impl.getObjectClass(key)) + elsif kind == CLASS_EVENT + clist << SchemaEventClass.new('', '', :impl => @impl.getEventClass(key)) + end + end + end - def get_classes(package) + return clist end def get_schema(class_key) @@ -606,12 +639,16 @@ module Qmf end class Broker < ConnectionHandler + include MonitorMixin attr_reader :impl def initialize(console, conn) + super() @console = console @conn = conn @session = nil + @cv = new_cond + @stable = nil @event = Qmfengine::BrokerEvent.new @xmtMessage = Qmfengine::Message.new @impl = Qmfengine::BrokerProxy.new(@console.impl) @@ -619,6 +656,21 @@ module Qmf @conn.add_conn_handler(self) end + def waitForStable(timeout = nil) + synchronize do + return if @stable + if timeout + unless @cv.wait(timeout) { @stable } + raise "Timed out waiting for broker connection to become stable" + end + else + while not @stable + @cv.wait + end + end + end + end + def do_broker_events() count = 0 valid = @impl.getEvent(@event) @@ -637,6 +689,11 @@ module Qmf @conn.impl.unbind(@session.handle, @event.exchange, @event.name, @event.bindingKey) when Qmfengine::BrokerEvent::SETUP_COMPLETE @impl.startProtocol + when Qmfengine::BrokerEvent::STABLE + synchronize do + @stable = :true + @cv.signal + end end @impl.popEvent valid = @impl.getEvent(@event) diff --git a/cpp/bindings/qmf/tests/ruby_console.rb b/cpp/bindings/qmf/tests/ruby_console.rb index c59ec0334c..fb48c29566 100755 --- a/cpp/bindings/qmf/tests/ruby_console.rb +++ b/cpp/bindings/qmf/tests/ruby_console.rb @@ -31,7 +31,25 @@ class App < Qmf::ConsoleHandler @connection = Qmf::Connection.new(@settings) @qmf = Qmf::Console.new - @qmf.add_connection(@connection) + @broker = @qmf.add_connection(@connection) + @broker.waitForStable + + packages = @qmf.get_packages + puts "----- Packages -----" + packages.each do |p| + puts p + puts " ----- Object Classes -----" + classes = @qmf.get_classes(p) + classes.each do |c| + puts " #{c.name}" + end + puts " ----- Event Classes -----" + classes = @qmf.get_classes(p, Qmf::CLASS_EVENT) + classes.each do |c| + puts " #{c.name}" + end + end + puts "-----" sleep end |
