summaryrefslogtreecommitdiff
path: root/cpp/src
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
commit74b68e0be99c74b8f59ef97a3a9162d5a8dfe257 (patch)
tree61081a73bc69a38555c902fbb5e3943875dd9cb1 /cpp/src
parent1256ed9262d0a8f769a72eb83b1669b33e1f7f59 (diff)
downloadqpid-python-74b68e0be99c74b8f59ef97a3a9162d5a8dfe257.tar.gz
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
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/qmf/engine/BrokerProxyImpl.cpp14
-rw-r--r--cpp/src/qmf/engine/BrokerProxyImpl.h1
-rw-r--r--cpp/src/qmf/engine/ConsoleImpl.cpp11
-rw-r--r--cpp/src/qmf/engine/ConsoleImpl.h5
-rw-r--r--cpp/src/qmf/engine/EventImpl.cpp18
-rw-r--r--cpp/src/qmf/engine/EventImpl.h4
6 files changed, 45 insertions, 8 deletions
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<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/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<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/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> 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/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<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);