summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKenneth Anthony Giusti <kgiusti@apache.org>2010-04-23 20:27:27 +0000
committerKenneth Anthony Giusti <kgiusti@apache.org>2010-04-23 20:27:27 +0000
commit944b2eb07f51118a37bacf3124dc19c0b7d85ca8 (patch)
tree5ac8c02fdb578f93e8e73d01c1e42eb56e202ac4
parent5e4a9f8dd51364ef4479c0c94d339b8dade93640 (diff)
downloadqpid-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.rb5
-rwxr-xr-xqpid/cpp/bindings/qmf/tests/ruby_console_test.rb33
-rw-r--r--qpid/cpp/bindings/qmf/tests/test_base.rb10
-rw-r--r--qpid/cpp/src/qmf/engine/BrokerProxyImpl.cpp14
-rw-r--r--qpid/cpp/src/qmf/engine/BrokerProxyImpl.h1
-rw-r--r--qpid/cpp/src/qmf/engine/ConsoleImpl.cpp11
-rw-r--r--qpid/cpp/src/qmf/engine/ConsoleImpl.h5
-rw-r--r--qpid/cpp/src/qmf/engine/EventImpl.cpp18
-rw-r--r--qpid/cpp/src/qmf/engine/EventImpl.h4
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);