summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
authorTed Ross <tross@apache.org>2011-02-04 08:22:30 +0000
committerTed Ross <tross@apache.org>2011-02-04 08:22:30 +0000
commite46939c93ba0682d74f025eeec7bdb88229b4277 (patch)
treeeb55184ad87bc9c31168bf955256959541fc117b /cpp
parente7f02a8b8b25d9fcce6525ccc5b794f8438995f0 (diff)
downloadqpid-python-e46939c93ba0682d74f025eeec7bdb88229b4277.tar.gz
Added missing even handling in the console.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1067111 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp')
-rw-r--r--cpp/bindings/qmf2/examples/python/find_agents.py3
-rw-r--r--cpp/bindings/qmf2/examples/ruby/find_agents.rb4
-rw-r--r--cpp/bindings/qmf2/python/qmf2.py3
-rw-r--r--cpp/bindings/qmf2/ruby/qmf2.rb3
-rw-r--r--cpp/include/qmf/ConsoleEvent.h2
-rw-r--r--cpp/src/qmf/Agent.cpp38
-rw-r--r--cpp/src/qmf/ConsoleEvent.cpp2
-rw-r--r--cpp/src/qmf/ConsoleEventImpl.h6
8 files changed, 59 insertions, 2 deletions
diff --git a/cpp/bindings/qmf2/examples/python/find_agents.py b/cpp/bindings/qmf2/examples/python/find_agents.py
index 15cc83649c..5fd71b3f1c 100644
--- a/cpp/bindings/qmf2/examples/python/find_agents.py
+++ b/cpp/bindings/qmf2/examples/python/find_agents.py
@@ -37,6 +37,9 @@ class FindAgents(qmf2.ConsoleHandler):
def agentSchemaUpdated(self, agent):
print "Agent Schema Updated: %r" % agent
+ def eventRaised(self, agent, data, timestamp, severity):
+ print "Event: data=%r time=%d sev=%d" % (data.getProperties(), timestamp, severity)
+
url = "localhost"
diff --git a/cpp/bindings/qmf2/examples/ruby/find_agents.rb b/cpp/bindings/qmf2/examples/ruby/find_agents.rb
index deefd5491a..712e5007be 100644
--- a/cpp/bindings/qmf2/examples/ruby/find_agents.rb
+++ b/cpp/bindings/qmf2/examples/ruby/find_agents.rb
@@ -41,6 +41,10 @@ class FindAgents < Qmf2::ConsoleHandler
def agent_schema_updated(agent)
puts "Agent with new Schemata: #{agent.to_s}"
end
+
+ def event_raised(agent, data, timestamp, severity)
+ puts "Event Raised time=#{timestamp} sev=#{severity} data=#{data.properties}"
+ end
end
diff --git a/cpp/bindings/qmf2/python/qmf2.py b/cpp/bindings/qmf2/python/qmf2.py
index 9bf464e155..61a5453f8e 100644
--- a/cpp/bindings/qmf2/python/qmf2.py
+++ b/cpp/bindings/qmf2/python/qmf2.py
@@ -173,6 +173,9 @@ class ConsoleHandler(Thread):
elif event.getType() == cqmf2.CONSOLE_AGENT_SCHEMA_UPDATE:
self.agentSchemaUpdated(Agent(event.getAgent()))
+ elif event.getType() == cqmf2.CONSOLE_EVENT:
+ self.eventRaised(Agent(event.getAgent()), Data(event.getData(0)), event.getTimestamp(), event.getSeverity())
+
##
## The following methods are intended to be overridden in a sub-class. They are
## handlers for events that occur on QMF consoles.
diff --git a/cpp/bindings/qmf2/ruby/qmf2.rb b/cpp/bindings/qmf2/ruby/qmf2.rb
index 642af35eca..6d1741ebc0 100644
--- a/cpp/bindings/qmf2/ruby/qmf2.rb
+++ b/cpp/bindings/qmf2/ruby/qmf2.rb
@@ -297,6 +297,9 @@ module Qmf2
when Cqmf2::CONSOLE_AGENT_SCHEMA_UPDATE
agent_schema_updated(Agent.new(event.getAgent))
+ when Cqmf2::CONSOLE_EVENT
+ event_raised(Agent.new(event.getAgent), Data.new(event.getData(0)), event.getTimestamp, event.getSeverity)
+
end
end
end
diff --git a/cpp/include/qmf/ConsoleEvent.h b/cpp/include/qmf/ConsoleEvent.h
index 54272334a4..b836b629af 100644
--- a/cpp/include/qmf/ConsoleEvent.h
+++ b/cpp/include/qmf/ConsoleEvent.h
@@ -74,6 +74,8 @@ namespace qmf {
QMF_EXTERN Data getData(uint32_t) const;
QMF_EXTERN bool isFinal() const;
QMF_EXTERN const qpid::types::Variant::Map& getArguments() const;
+ QMF_EXTERN int getSeverity() const;
+ QMF_EXTERN uint64_t getTimestamp() const;
#ifndef SWIG
private:
diff --git a/cpp/src/qmf/Agent.cpp b/cpp/src/qmf/Agent.cpp
index 8783cfa832..176cadf0c1 100644
--- a/cpp/src/qmf/Agent.cpp
+++ b/cpp/src/qmf/Agent.cpp
@@ -377,9 +377,43 @@ void AgentImpl::handleMethodResponse(const Variant::Map& response, const Message
}
-void AgentImpl::handleDataIndication(const Variant::List&, const Message&)
+void AgentImpl::handleDataIndication(const Variant::List& list, const Message& msg)
{
- // TODO
+ Variant::Map::const_iterator aIter;
+ const Variant::Map& props(msg.getProperties());
+ boost::shared_ptr<SyncContext> context;
+
+ aIter = props.find("qmf.content");
+ if (aIter == props.end())
+ return;
+
+ string content_type(aIter->second.asString());
+ if (content_type != "_event")
+ return;
+
+ for (Variant::List::const_iterator lIter = list.begin(); lIter != list.end(); lIter++) {
+ const Variant::Map& eventMap(lIter->asMap());
+ Data data(new DataImpl(eventMap, this));
+ int severity(SEV_NOTICE);
+ uint64_t timestamp(0);
+
+ aIter = eventMap.find("_severity");
+ if (aIter != eventMap.end())
+ severity = int(aIter->second.asInt8());
+
+ aIter = eventMap.find("_timestamp");
+ if (aIter != eventMap.end())
+ timestamp = aIter->second.asUint64();
+
+ auto_ptr<ConsoleEventImpl> eventImpl(new ConsoleEventImpl(CONSOLE_EVENT));
+ eventImpl->setAgent(this);
+ eventImpl->addData(data);
+ eventImpl->setSeverity(severity);
+ eventImpl->setTimestamp(timestamp);
+ if (data.hasSchema())
+ learnSchemaId(data.getSchemaId());
+ session.enqueueEvent(eventImpl.release());
+ }
}
diff --git a/cpp/src/qmf/ConsoleEvent.cpp b/cpp/src/qmf/ConsoleEvent.cpp
index b76abc83c6..b2a5e321c7 100644
--- a/cpp/src/qmf/ConsoleEvent.cpp
+++ b/cpp/src/qmf/ConsoleEvent.cpp
@@ -44,6 +44,8 @@ uint32_t ConsoleEvent::getDataCount() const { return impl->getDataCount(); }
Data ConsoleEvent::getData(uint32_t i) const { return impl->getData(i); }
bool ConsoleEvent::isFinal() const { return impl->isFinal(); }
const Variant::Map& ConsoleEvent::getArguments() const { return impl->getArguments(); }
+int ConsoleEvent::getSeverity() const { return impl->getSeverity(); }
+uint64_t ConsoleEvent::getTimestamp() const { return impl->getTimestamp(); }
SchemaId ConsoleEventImpl::getSchemaId(uint32_t i) const
diff --git a/cpp/src/qmf/ConsoleEventImpl.h b/cpp/src/qmf/ConsoleEventImpl.h
index e7acb54152..9843971456 100644
--- a/cpp/src/qmf/ConsoleEventImpl.h
+++ b/cpp/src/qmf/ConsoleEventImpl.h
@@ -42,6 +42,8 @@ namespace qmf {
void addSchemaId(const SchemaId& s) { newSchemaIds.push_back(SchemaId(s)); }
void setFinal() { final = true; }
void setArguments(const qpid::types::Variant::Map& a) { arguments = a; }
+ void setSeverity(int s) { severity = s; }
+ void setTimestamp(uint64_t t) { timestamp = t; }
//
// Methods from API handle
@@ -56,6 +58,8 @@ namespace qmf {
Data getData(uint32_t i) const;
bool isFinal() const { return final; }
const qpid::types::Variant::Map& getArguments() const { return arguments; }
+ int getSeverity() const { return severity; }
+ uint64_t getTimestamp() const { return timestamp; }
private:
const ConsoleEventCode eventType;
@@ -66,6 +70,8 @@ namespace qmf {
std::list<Data> dataList;
std::list<SchemaId> newSchemaIds;
qpid::types::Variant::Map arguments;
+ int severity;
+ uint64_t timestamp;
};
struct ConsoleEventImplAccess