summaryrefslogtreecommitdiff
path: root/qpid/cpp/examples/qmf-console/printevents.cpp
diff options
context:
space:
mode:
authorTed Ross <tross@apache.org>2008-12-23 19:38:25 +0000
committerTed Ross <tross@apache.org>2008-12-23 19:38:25 +0000
commit564775ae717db7743d41f7620cde8845dc7d35b8 (patch)
tree8e5f5b8985a5428ce766ef05161887b256615a88 /qpid/cpp/examples/qmf-console/printevents.cpp
parent1ac4193fbf6dcbf1e95da4250b6d3bb1d928ab2f (diff)
downloadqpid-python-564775ae717db7743d41f7620cde8845dc7d35b8.tar.gz
QPID-1412 Updates and fixes for the c++ console API:
- Added event support - Converted raw pointers to shared_ptrs in references to Values. This fixes a memory leak in the original code. - Added wrappers to make value access more convenient. - Added timeout handling for synchronous operations. Timeout values are configurable. - Fixed a bug in getObjects whereby waitForStable was not called and the operation could fail if called too early. - Added examples "printevents" and "ping" to illustrate the usage of different aspects of the API. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@729075 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp/examples/qmf-console/printevents.cpp')
-rw-r--r--qpid/cpp/examples/qmf-console/printevents.cpp105
1 files changed, 105 insertions, 0 deletions
diff --git a/qpid/cpp/examples/qmf-console/printevents.cpp b/qpid/cpp/examples/qmf-console/printevents.cpp
new file mode 100644
index 0000000000..bbec2c1af0
--- /dev/null
+++ b/qpid/cpp/examples/qmf-console/printevents.cpp
@@ -0,0 +1,105 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+#include "qpid/console/ConsoleListener.h"
+#include "qpid/console/SessionManager.h"
+#include "qpid/sys/Time.h"
+
+using namespace std;
+using namespace qpid::console;
+
+//
+// Define a listener class to receive asynchronous events.
+//
+class Listener : public ConsoleListener {
+public:
+ void brokerConnected(const Broker& broker) {
+ cout << qpid::sys::now() << " NOTIC qpid-printevents:brokerConnected broker=" <<
+ broker.getUrl() << endl;
+ }
+
+ void brokerDisconnected(const Broker& broker) {
+ cout << qpid::sys::now() << " NOTIC qpid-printevents:brokerDisonnected broker=" <<
+ broker.getUrl() << endl;
+ }
+
+ void event(Event& event) {
+ cout << event << endl;
+ }
+};
+
+
+//==============================================================
+// Main program
+//==============================================================
+int main_int(int /*argc*/, char** /*argv*/)
+{
+ //
+ // Declare an instance of our listener.
+ //
+ Listener listener;
+
+ //
+ // Declare connection settings for the messaging broker. The settings default to
+ // localhost:5672 with user guest (password guest). Refer to the header file
+ // <qpid/client/ConnectionSettings.h> for full details.
+ //
+ qpid::client::ConnectionSettings connSettings;
+
+ //
+ // Declare the (optional) session manager settings. Disable the reception of
+ // object updates and heartbeats. Note that by disabling the reception of things
+ // we don't need, we don't unnecessarily use network bandwidth.
+ //
+ SessionManager::Settings smSettings;
+ smSettings.rcvObjects = false;
+ smSettings.rcvHeartbeats = false;
+
+ //
+ // Declare the console session manager.
+ //
+ SessionManager sm(&listener, smSettings);
+
+ //
+ // Add a broker connection to the session manager. If desired, multiple brokers may
+ // be connected.
+ //
+ Broker* broker = sm.addBroker(connSettings);
+
+ //
+ // Sleep indefinitely while asynchronous events are handled by the listener.
+ //
+ for (;;)
+ ::sleep(1);
+
+ sm.delBroker(broker);
+ return 0;
+}
+
+int main(int argc, char** argv)
+{
+ try {
+ return main_int(argc, argv);
+ } catch(std::exception& e) {
+ cout << "Top Level Exception: " << e.what() << endl;
+ }
+}
+