From 74b68e0be99c74b8f59ef97a3a9162d5a8dfe257 Mon Sep 17 00:00:00 2001 From: Kenneth Anthony Giusti Date: Fri, 23 Apr 2010 20:27:27 +0000 Subject: QPID-2546: implement event support for ruby wrapper. Python pending... git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@937506 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qmf/engine/BrokerProxyImpl.cpp | 14 ++++++++++++-- cpp/src/qmf/engine/BrokerProxyImpl.h | 1 + cpp/src/qmf/engine/ConsoleImpl.cpp | 11 ++++++++++- cpp/src/qmf/engine/ConsoleImpl.h | 5 +++-- cpp/src/qmf/engine/EventImpl.cpp | 18 +++++++++++++++--- cpp/src/qmf/engine/EventImpl.h | 4 ++++ 6 files changed, 45 insertions(+), 8 deletions(-) (limited to 'cpp/src') diff --git a/cpp/src/qmf/engine/BrokerProxyImpl.cpp b/cpp/src/qmf/engine/BrokerProxyImpl.cpp index 2d955b0c26..b99cb414dc 100644 --- a/cpp/src/qmf/engine/BrokerProxyImpl.cpp +++ b/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 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/cpp/src/qmf/engine/BrokerProxyImpl.h b/cpp/src/qmf/engine/BrokerProxyImpl.h index b651b52345..494da5e239 100644 --- a/cpp/src/qmf/engine/BrokerProxyImpl.h +++ b/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/cpp/src/qmf/engine/ConsoleImpl.cpp b/cpp/src/qmf/engine/ConsoleImpl.cpp index c2d1f51f2b..1b66d9e81f 100644 --- a/cpp/src/qmf/engine/ConsoleImpl.cpp +++ b/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 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/cpp/src/qmf/engine/ConsoleImpl.h b/cpp/src/qmf/engine/ConsoleImpl.h index 8f99c5e6b9..ace47ec87c 100644 --- a/cpp/src/qmf/engine/ConsoleImpl.h +++ b/cpp/src/qmf/engine/ConsoleImpl.h @@ -59,13 +59,13 @@ namespace engine { const SchemaClassKey* classKey; boost::shared_ptr object; void* context; - Event* event; + boost::shared_ptr 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 agent, uint64_t timestamp); + void eventEventReceived(boost::shared_ptr event); }; } } diff --git a/cpp/src/qmf/engine/EventImpl.cpp b/cpp/src/qmf/engine/EventImpl.cpp index 3509220b0c..4b034e8e83 100644 --- a/cpp/src/qmf/engine/EventImpl.cpp +++ b/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/cpp/src/qmf/engine/EventImpl.h b/cpp/src/qmf/engine/EventImpl.h index dfdf64e848..4046e71ef9 100644 --- a/cpp/src/qmf/engine/EventImpl.h +++ b/cpp/src/qmf/engine/EventImpl.h @@ -29,9 +29,13 @@ namespace qmf { namespace engine { + typedef boost::shared_ptr EventPtr; + struct EventImpl { typedef boost::shared_ptr ValuePtr; const SchemaEventClass* eventClass; + uint64_t timestamp; + uint8_t severity; mutable std::map arguments; EventImpl(const SchemaEventClass* type); -- cgit v1.2.1