summaryrefslogtreecommitdiff
path: root/cpp/bindings/qmf/ruby
diff options
context:
space:
mode:
authorTed Ross <tross@apache.org>2009-10-23 18:31:10 +0000
committerTed Ross <tross@apache.org>2009-10-23 18:31:10 +0000
commita63be09b172c9091b87dedaceaa755777b914756 (patch)
tree38d0db1f7796903e2ec588ca375311c8368c1592 /cpp/bindings/qmf/ruby
parentc677d6ffec635f28e3e48255cfca3508a13b40ae (diff)
downloadqpid-python-a63be09b172c9091b87dedaceaa755777b914756.tar.gz
Removed references to broker and agent bank from API, replaced with the
more generic (and forward compatible) "key". In the Ruby binding, ensured that ruby objects reference their own copies of the wrapped c++ objects to protect from problems when the c++ objects are deleted out from under the wrappers. Added agent discriminator to the console::objects method. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@829167 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/bindings/qmf/ruby')
-rw-r--r--cpp/bindings/qmf/ruby/qmf.rb80
1 files changed, 37 insertions, 43 deletions
diff --git a/cpp/bindings/qmf/ruby/qmf.rb b/cpp/bindings/qmf/ruby/qmf.rb
index db80381581..41c2c4a1ee 100644
--- a/cpp/bindings/qmf/ruby/qmf.rb
+++ b/cpp/bindings/qmf/ruby/qmf.rb
@@ -448,18 +448,19 @@ module Qmf
@impl.isDeleted
end
- def index()
+ def key()
end
end
class ObjectId
- attr_reader :impl
+ attr_reader :impl, :agent_key
def initialize(impl=nil)
if impl
@impl = impl
else
@impl = Qmfengine::ObjectId.new
end
+ @agent_key = "#{@impl.getBrokerBank}.#{@impl.getAgentBank}"
end
def object_num_high
@@ -470,14 +471,6 @@ module Qmf
@impl.getObjectNumLo
end
- def broker_bank
- @impl.getBrokerBank
- end
-
- def agent_bank
- @impl.getAgentBank
- end
-
def ==(other)
return (@impl.getObjectNumHi == other.impl.getObjectNumHi) &&
(@impl.getObjectNumLo == other.impl.getObjectNumLo)
@@ -748,7 +741,7 @@ module Qmf
class SchemaClassKey
attr_reader :impl
def initialize(i)
- @impl = i
+ @impl = Qmfengine::SchemaClassKey.new(i)
end
def package_name
@@ -956,6 +949,7 @@ module Qmf
def objects(query, kwargs = {})
timeout = 30
+ agent = nil
kwargs.merge!(query) if query.class == Hash
if kwargs.include?(:timeout)
@@ -963,6 +957,11 @@ module Qmf
kwargs.delete(:timeout)
end
+ if kwargs.include?(:agent)
+ agent = kwargs[:agent]
+ kwargs.delete(:agent)
+ end
+
query = Query.new(kwargs) if query.class == Hash
@select = []
@@ -975,7 +974,7 @@ module Qmf
@sync_result = []
broker = nil
synchronize { broker = @broker_list[0] }
- broker.send_query(query.impl, nil)
+ broker.send_query(query.impl, nil, agent)
unless @cv.wait(timeout) { @sync_count == 0 }
raise "Timed out waiting for response"
end
@@ -1045,21 +1044,25 @@ module Qmf
valid = @impl.getEvent(@event)
while valid
count += 1
- case @event.kind
- when Qmfengine::ConsoleEvent::AGENT_ADDED
- @handler.agent_added(AgentProxy.new(@event.agent, nil)) if @handler
- when Qmfengine::ConsoleEvent::AGENT_DELETED
- @handler.agent_deleted(AgentProxy.new(@event.agent, nil)) if @handler
- when Qmfengine::ConsoleEvent::NEW_PACKAGE
- @handler.new_package(@event.name) if @handler
- when Qmfengine::ConsoleEvent::NEW_CLASS
- @handler.new_class(SchemaClassKey.new(@event.classKey)) if @handler
- when Qmfengine::ConsoleEvent::OBJECT_UPDATE
- @handler.object_update(ConsoleObject.new(nil, :impl => @event.object), @event.hasProps, @event.hasStats) if @handler
- when Qmfengine::ConsoleEvent::EVENT_RECEIVED
- when Qmfengine::ConsoleEvent::AGENT_HEARTBEAT
- @handler.agent_heartbeat(AgentProxy.new(@event.agent, nil), @event.timestamp) if @handler
- when Qmfengine::ConsoleEvent::METHOD_RESPONSE
+ begin
+ case @event.kind
+ when Qmfengine::ConsoleEvent::AGENT_ADDED
+ @handler.agent_added(AgentProxy.new(@event.agent, nil)) if @handler
+ when Qmfengine::ConsoleEvent::AGENT_DELETED
+ @handler.agent_deleted(AgentProxy.new(@event.agent, nil)) if @handler
+ when Qmfengine::ConsoleEvent::NEW_PACKAGE
+ @handler.new_package(@event.name) if @handler
+ when Qmfengine::ConsoleEvent::NEW_CLASS
+ @handler.new_class(SchemaClassKey.new(@event.classKey)) if @handler
+ when Qmfengine::ConsoleEvent::OBJECT_UPDATE
+ @handler.object_update(ConsoleObject.new(nil, :impl => @event.object), @event.hasProps, @event.hasStats) if @handler
+ when Qmfengine::ConsoleEvent::EVENT_RECEIVED
+ when Qmfengine::ConsoleEvent::AGENT_HEARTBEAT
+ @handler.agent_heartbeat(AgentProxy.new(@event.agent, nil), @event.timestamp) if @handler
+ when Qmfengine::ConsoleEvent::METHOD_RESPONSE
+ end
+ rescue
+ puts "Exception caught in callback thread: #{$!}"
end
@impl.popEvent
valid = @impl.getEvent(@event)
@@ -1069,23 +1072,13 @@ module Qmf
end
class AgentProxy
- attr_reader :broker
+ attr_reader :impl, :broker, :label, :key
def initialize(impl, broker)
- @impl = impl
+ @impl = Qmfengine::AgentProxy.new(impl)
@broker = broker
- end
-
- def label
- @impl.getLabel
- end
-
- def broker_bank
- @impl.getBrokerBank
- end
-
- def agent_bank
- @impl.getAgentBank
+ @label = @impl.getLabel
+ @key = "#{@impl.getBrokerBank}.#{@impl.getAgentBank}"
end
end
@@ -1130,8 +1123,9 @@ module Qmf
end
end
- def send_query(query, ctx)
- @impl.sendQuery(query, ctx)
+ def send_query(query, ctx, agent)
+ agent_impl = agent.impl if agent
+ @impl.sendQuery(query, ctx, agent_impl)
@conn.kick
end