diff options
author | Kenneth Anthony Giusti <kgiusti@apache.org> | 2010-04-23 20:27:27 +0000 |
---|---|---|
committer | Kenneth Anthony Giusti <kgiusti@apache.org> | 2010-04-23 20:27:27 +0000 |
commit | 944b2eb07f51118a37bacf3124dc19c0b7d85ca8 (patch) | |
tree | 5ac8c02fdb578f93e8e73d01c1e42eb56e202ac4 | |
parent | 5e4a9f8dd51364ef4479c0c94d339b8dade93640 (diff) | |
download | qpid-python-944b2eb07f51118a37bacf3124dc19c0b7d85ca8.tar.gz |
QPID-2546: implement event support for ruby wrapper. Python pending...
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@937506 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | qpid/cpp/bindings/qmf/ruby/qmf.rb | 5 | ||||
-rwxr-xr-x | qpid/cpp/bindings/qmf/tests/ruby_console_test.rb | 33 | ||||
-rw-r--r-- | qpid/cpp/bindings/qmf/tests/test_base.rb | 10 | ||||
-rw-r--r-- | qpid/cpp/src/qmf/engine/BrokerProxyImpl.cpp | 14 | ||||
-rw-r--r-- | qpid/cpp/src/qmf/engine/BrokerProxyImpl.h | 1 | ||||
-rw-r--r-- | qpid/cpp/src/qmf/engine/ConsoleImpl.cpp | 11 | ||||
-rw-r--r-- | qpid/cpp/src/qmf/engine/ConsoleImpl.h | 5 | ||||
-rw-r--r-- | qpid/cpp/src/qmf/engine/EventImpl.cpp | 18 | ||||
-rw-r--r-- | qpid/cpp/src/qmf/engine/EventImpl.h | 4 |
9 files changed, 90 insertions, 11 deletions
diff --git a/qpid/cpp/bindings/qmf/ruby/qmf.rb b/qpid/cpp/bindings/qmf/ruby/qmf.rb index 823cf9bf93..402b99b800 100644 --- a/qpid/cpp/bindings/qmf/ruby/qmf.rb +++ b/qpid/cpp/bindings/qmf/ruby/qmf.rb @@ -339,7 +339,7 @@ module Qmf @impl = Qmfengine::Event.new(@event_class.impl) elsif kwargs.include?(:impl) @impl = Qmfengine::Event.new(kwargs[:impl]) - @event_class = SchemaEventClass.new(nil, nil, :impl => @impl.getClass) + @event_class = SchemaEventClass.new(nil, nil, nil, :impl => @impl.getClass) end end @@ -1034,7 +1034,7 @@ module Qmf if kind == CLASS_OBJECT clist << SchemaObjectClass.new(nil, nil, :impl => @impl.getObjectClass(key)) elsif kind == CLASS_EVENT - clist << SchemaEventClass.new(nil, nil, :impl => @impl.getEventClass(key)) + clist << SchemaEventClass.new(nil, nil, nil, :impl => @impl.getEventClass(key)) end end end @@ -1190,6 +1190,7 @@ module Qmf 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 + @handler.event_received(QmfEvent.new(nil, :impl => @event.event)) if @handler when Qmfengine::ConsoleEvent::AGENT_HEARTBEAT @handler.agent_heartbeat(AgentProxy.new(@event.agent, nil), @event.timestamp) if @handler when Qmfengine::ConsoleEvent::METHOD_RESPONSE diff --git a/qpid/cpp/bindings/qmf/tests/ruby_console_test.rb b/qpid/cpp/bindings/qmf/tests/ruby_console_test.rb index 9ef0ef57a8..11be03fc34 100755 --- a/qpid/cpp/bindings/qmf/tests/ruby_console_test.rb +++ b/qpid/cpp/bindings/qmf/tests/ruby_console_test.rb @@ -267,6 +267,39 @@ class ConsoleTest < ConsoleTestBase end + def test_F_events + + @event_list.clear + @store_events = :true + + parent = @qmfc.object(:class =>"parent") + assert(parent, "Number of parent objects") + + parent.set_numerics("big") + parent.set_numerics("small") + parent.set_numerics("negative") + parent.set_short_string("TEST") + parent.set_long_string("LONG_TEST") + parent.probe_userid() + + @store_events = :false + + assert_equal(@event_list.length, 5) + + assert_equal(@event_list[0].get_attr("uint32val"), 0xA5A55A5A) + assert_equal(@event_list[0].get_attr("strval"), "Unused") + assert_equal(@event_list[1]["uint32val"], 5) + assert_equal(@event_list[1].get_attr("strval"), "Unused") + assert_equal(@event_list[2].get_attr("uint32val"), 0) + assert_equal(@event_list[2].get_attr("strval"), "Unused") + assert_equal(@event_list[3].get_attr("uint32val"), 0) + assert_equal(@event_list[3].get_attr("strval"), "TEST") + assert_equal(@event_list[4].get_attr("uint32val"), 0) + assert_equal(@event_list[4].get_attr("strval"), "LONG_TEST") + + @event_list.clear + + end def test_G_basic_map_list_data parent = @qmfc.object(:class => "parent") diff --git a/qpid/cpp/bindings/qmf/tests/test_base.rb b/qpid/cpp/bindings/qmf/tests/test_base.rb index cb7fd9d4f9..3e4337a9c0 100644 --- a/qpid/cpp/bindings/qmf/tests/test_base.rb +++ b/qpid/cpp/bindings/qmf/tests/test_base.rb @@ -28,11 +28,14 @@ class ConsoleTestBase < Qmf::ConsoleHandler @settings.host = ARGV[0] if ARGV.size > 0 @settings.port = ARGV[1].to_i if ARGV.size > 1 @connection = Qmf::Connection.new(@settings) - @qmfc = Qmf::Console.new + @qmfc = Qmf::Console.new(self) @broker = @qmfc.add_connection(@connection) @broker.wait_for_stable + @store_events = :false + @event_list = [] + tests = [] methods.each do |m| name = m.to_s @@ -70,4 +73,9 @@ class ConsoleTestBase < Qmf::ConsoleHandler def fail(text) raise text end + + def event_received(event) + @event_list << event if @store_events + end + end diff --git a/qpid/cpp/src/qmf/engine/BrokerProxyImpl.cpp b/qpid/cpp/src/qmf/engine/BrokerProxyImpl.cpp index 2d955b0c26..b99cb414dc 100644 --- a/qpid/cpp/src/qmf/engine/BrokerProxyImpl.cpp +++ b/qpid/cpp/src/qmf/engine/BrokerProxyImpl.cpp @@ -445,9 +445,19 @@ void BrokerProxyImpl::handleHeartbeatIndication(Buffer& inBuffer, uint32_t seq, QPID_LOG(trace, "RCVD HeartbeatIndication seq=" << seq << " agentBank=" << agentBank); } -void BrokerProxyImpl::handleEventIndication(Buffer& /*inBuffer*/, uint32_t /*seq*/) +void BrokerProxyImpl::handleEventIndication(Buffer& inBuffer, uint32_t seq) { - // TODO + auto_ptr<SchemaClassKey> classKey(SchemaClassKeyImpl::factory(inBuffer)); + const SchemaEventClass *schema = console.impl->getEventClass(classKey.get()); + if (schema == 0) { + QPID_LOG(trace, "No Schema Found for EventIndication. seq=" << seq << " key=" << classKey->impl->str()); + return; + } + + EventPtr eptr(EventImpl::factory(schema, inBuffer)); + + console.impl->eventEventReceived(eptr); + QPID_LOG(trace, "RCVD EventIndication seq=" << seq << " key=" << classKey->impl->str()); } void BrokerProxyImpl::handleSchemaResponse(Buffer& inBuffer, uint32_t seq) diff --git a/qpid/cpp/src/qmf/engine/BrokerProxyImpl.h b/qpid/cpp/src/qmf/engine/BrokerProxyImpl.h index b651b52345..494da5e239 100644 --- a/qpid/cpp/src/qmf/engine/BrokerProxyImpl.h +++ b/qpid/cpp/src/qmf/engine/BrokerProxyImpl.h @@ -22,6 +22,7 @@ #include "qmf/engine/Console.h" #include "qmf/engine/ObjectImpl.h" +#include "qmf/engine/EventImpl.h" #include "qmf/engine/SchemaImpl.h" #include "qmf/engine/ValueImpl.h" #include "qmf/engine/QueryImpl.h" diff --git a/qpid/cpp/src/qmf/engine/ConsoleImpl.cpp b/qpid/cpp/src/qmf/engine/ConsoleImpl.cpp index c2d1f51f2b..1b66d9e81f 100644 --- a/qpid/cpp/src/qmf/engine/ConsoleImpl.cpp +++ b/qpid/cpp/src/qmf/engine/ConsoleImpl.cpp @@ -60,7 +60,7 @@ ConsoleEvent ConsoleEventImpl::copy() item.classKey = classKey; item.object = object.get(); item.context = context; - item.event = event; + item.event = event.get(); item.timestamp = timestamp; item.hasProps = hasProps; item.hasStats = hasStats; @@ -392,6 +392,15 @@ void ConsoleImpl::eventAgentHeartbeat(boost::shared_ptr<AgentProxy> agent, uint6 eventQueue.push_back(event); } + +void ConsoleImpl::eventEventReceived(EventPtr event) +{ + ConsoleEventImpl::Ptr console_event(new ConsoleEventImpl(ConsoleEvent::EVENT_RECEIVED)); + console_event->event = event; + Mutex::ScopedLock _lock(lock); + eventQueue.push_back(console_event); +} + //================================================================== // Wrappers //================================================================== diff --git a/qpid/cpp/src/qmf/engine/ConsoleImpl.h b/qpid/cpp/src/qmf/engine/ConsoleImpl.h index 8f99c5e6b9..ace47ec87c 100644 --- a/qpid/cpp/src/qmf/engine/ConsoleImpl.h +++ b/qpid/cpp/src/qmf/engine/ConsoleImpl.h @@ -59,13 +59,13 @@ namespace engine { const SchemaClassKey* classKey; boost::shared_ptr<Object> object; void* context; - Event* event; + boost::shared_ptr<Event> event; uint64_t timestamp; bool hasProps; bool hasStats; ConsoleEventImpl(ConsoleEvent::EventKind k) : - kind(k), classKey(0), context(0), event(0), timestamp(0) {} + kind(k), classKey(0), context(0), timestamp(0) {} ~ConsoleEventImpl() {} ConsoleEvent copy(); }; @@ -137,6 +137,7 @@ namespace engine { void eventNewClass(const SchemaClassKey* key); void eventObjectUpdate(ObjectPtr object, bool prop, bool stat); void eventAgentHeartbeat(boost::shared_ptr<AgentProxy> agent, uint64_t timestamp); + void eventEventReceived(boost::shared_ptr<Event> event); }; } } diff --git a/qpid/cpp/src/qmf/engine/EventImpl.cpp b/qpid/cpp/src/qmf/engine/EventImpl.cpp index 3509220b0c..4b034e8e83 100644 --- a/qpid/cpp/src/qmf/engine/EventImpl.cpp +++ b/qpid/cpp/src/qmf/engine/EventImpl.cpp @@ -26,7 +26,7 @@ using namespace std; using namespace qmf::engine; using qpid::framing::Buffer; -EventImpl::EventImpl(const SchemaEventClass* type) : eventClass(type) +EventImpl::EventImpl(const SchemaEventClass* type) : eventClass(type), timestamp(0), severity(0) { int argCount = eventClass->getArgumentCount(); int idx; @@ -38,9 +38,21 @@ EventImpl::EventImpl(const SchemaEventClass* type) : eventClass(type) } -EventImpl::EventImpl(const SchemaEventClass* type, Buffer&) : - eventClass(type) +EventImpl::EventImpl(const SchemaEventClass* type, Buffer& buffer) : + eventClass(type), timestamp(0), severity(0) { + int argCount = eventClass->getArgumentCount(); + int idx; + + timestamp = buffer.getLongLong(); + severity = buffer.getOctet(); + + for (idx = 0; idx < argCount; idx++) + { + const SchemaArgument *arg = eventClass->getArgument(idx); + Value* pval = ValueImpl::factory(arg->getType(), buffer); + arguments[arg->getName()] = ValuePtr(pval); + } } diff --git a/qpid/cpp/src/qmf/engine/EventImpl.h b/qpid/cpp/src/qmf/engine/EventImpl.h index dfdf64e848..4046e71ef9 100644 --- a/qpid/cpp/src/qmf/engine/EventImpl.h +++ b/qpid/cpp/src/qmf/engine/EventImpl.h @@ -29,9 +29,13 @@ namespace qmf { namespace engine { + typedef boost::shared_ptr<Event> EventPtr; + struct EventImpl { typedef boost::shared_ptr<Value> ValuePtr; const SchemaEventClass* eventClass; + uint64_t timestamp; + uint8_t severity; mutable std::map<std::string, ValuePtr> arguments; EventImpl(const SchemaEventClass* type); |