Author: gsim
Date: Wed Dec 13 11:03:52 2006
New Revision: 486797

URL: http://svn.apache.org/viewvc?view=rev&rev=486797
Log:
A bit more documentation for the client tests which are currently doubling as 
examples.

Modified:
    incubator/qpid/trunk/qpid/cpp/tests/client_test.cpp
    incubator/qpid/trunk/qpid/cpp/tests/echo_service.cpp
    incubator/qpid/trunk/qpid/cpp/tests/topic_listener.cpp
    incubator/qpid/trunk/qpid/cpp/tests/topic_publisher.cpp

Modified: incubator/qpid/trunk/qpid/cpp/tests/client_test.cpp
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/tests/client_test.cpp?view=diff&rev=486797&r1=486796&r2=486797
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/tests/client_test.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/tests/client_test.cpp Wed Dec 13 11:03:52 2006
@@ -18,6 +18,14 @@
  * under the License.
  *
  */
+
+/**
+ * This file provides a simple test (and example) of basic
+ * functionality including declaring an exchange and a queue, binding
+ * these together, publishing a message and receiving that message
+ * asynchronously.
+ */
+
 #include <iostream>
 
 #include <QpidError.h>
@@ -32,14 +40,19 @@
 using namespace qpid::sys;
 using std::string;
 
+/**
+ * A simple message listener implementation that prints out the
+ * message content then notifies a montitor allowing the test to
+ * complete.
+ */
 class SimpleListener : public virtual MessageListener{
     Monitor* monitor;
 
 public:
     inline SimpleListener(Monitor* _monitor) : monitor(_monitor){}
 
-    inline virtual void received(Message& /*msg*/){
-       std::cout << "Received message " /**<< msg **/<< std::endl;
+    inline virtual void received(Message& msg){
+       std::cout << "Received message " << msg.getData()  << std::endl;
        monitor->notify();
     }
 };
@@ -47,44 +60,67 @@
 int main(int argc, char**)
 {
     try{               
-       Connection con(argc > 1);
-       Channel channel;
+        //Use a custom exchange
        Exchange exchange("MyExchange", Exchange::TOPIC_EXCHANGE);
+        //Use a named, temporary queue
        Queue queue("MyQueue", true);
-       
-       string host("localhost");
-       
+
+        //Create and open a connection
+       Connection con(argc > 1);
+       string host("localhost");       
        con.open(host);
        std::cout << "Opened connection." << std::endl;
+
+        //Create and open a channel on the connection through which
+        //most functionality is exposed
+       Channel channel;      
        con.openChannel(&channel);
        std::cout << "Opened channel." << std::endl;    
+
+        //'declare' the exchange and the queue, which will create them
+        //as they don't exist
        channel.declareExchange(exchange);
        std::cout << "Declared exchange." << std::endl;
        channel.declareQueue(queue);
        std::cout << "Declared queue." << std::endl;
+
+        //now bind the queue to the exchange
        qpid::framing::FieldTable args;
        channel.bind(exchange, queue, "MyTopic", args);
        std::cout << "Bound queue to exchange." << std::endl;
 
-       //set up a message listener
+       //Set up a message listener to receive any messages that
+       //arrive in our queue on the broker. We only expect one, and
+       //as it will be received on another thread, we create a
+       //montior to use to notify the main thread when that message
+       //is received.
        Monitor monitor;
        SimpleListener listener(&monitor);
        string tag("MyTag");
        channel.consume(queue, tag, &listener);
-       channel.start();
        std::cout << "Registered consumer." << std::endl;
 
+        //we need to enable the message dispatching for this channel
+        //and we want that to occur on another thread so we call
+        //start().
+       channel.start();
+
+        //Now we create and publish a message to our exchange with a
+        //routing key that will cause it to be routed to our queue
        Message msg;
        string data("MyMessage");
        msg.setData(data);
        channel.publish(msg, exchange, "MyTopic");
-       std::cout << "Published message." << std::endl;
+       std::cout << "Published message: " << data << std::endl;
 
        {
             Monitor::ScopedLock l(monitor);
+            //now we wait until we receive notification that the
+            //message was received
             monitor.wait();
         }
         
+        //close the channel & connection
        con.closeChannel(&channel);
        std::cout << "Closed channel." << std::endl;
        con.close();    

Modified: incubator/qpid/trunk/qpid/cpp/tests/echo_service.cpp
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/tests/echo_service.cpp?view=diff&rev=486797&r1=486796&r2=486797
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/tests/echo_service.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/tests/echo_service.cpp Wed Dec 13 11:03:52 
2006
@@ -18,6 +18,15 @@
  * under the License.
  *
  */
+
+/**
+ * This class provides an example of using AMQP for a request-response
+ * style system. 'Requests' are messages sent to a well known
+ * destination. A 'service' process consumes these message and
+ * responds by echoing the message back to the sender on a
+ * sender-specified private queue.
+ */
+
 #include <QpidError.h>
 #include <ClientChannel.h>
 #include <Connection.h>
@@ -32,6 +41,11 @@
 using namespace qpid::sys;
 using std::string;
 
+
+/**
+ * A message listener implementation representing the 'service', this
+ * will 'echo' any requests received.
+ */
 class EchoServer : public MessageListener{    
     Channel* const channel;
 public:
@@ -39,11 +53,19 @@
     virtual void received(Message& msg);
 };
 
+/** 
+ * A message listener implementation that merely prints received
+ * messages to the console. Used to report on 'echo' responses.
+ */
 class LoggingListener : public MessageListener{    
 public:
     virtual void received(Message& msg);
 };
 
+/**
+ * A utility class that manages the command line options needed to run
+ * the example confirgurably.
+ */
 class Args{
     string host;
     int port;
@@ -62,6 +84,11 @@
     inline bool getClient() const { return client; }
 };
 
+/**
+ * The main test path. There are two basic modes: 'client' and
+ * 'service'. First one or more services are started, then one or more
+ * clients are started and messages can be sent.
+ */
 int main(int argc, char** argv){
     const std::string echo_service("echo_service");
     Args args;
@@ -69,6 +96,8 @@
     if (args.getHelp()) {
         args.usage();
     } else if (args.getClient()) {
+        //we have been started in 'client' mode, i.e. we will send an
+        //echo requests and print responses received.
         try {
             //Create connection & open a channel
             Connection connection(args.getTrace());
@@ -110,6 +139,9 @@
             std::cout << error.what() << std::endl;
         }        
     } else {
+        // we are in 'service' mode, i.e. we will consume messages
+        // from the request queue and echo each request back to the
+        // senders own private response queue.
         try {
             //Create connection & open a channel
             Connection connection(args.getTrace());

Modified: incubator/qpid/trunk/qpid/cpp/tests/topic_listener.cpp
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/tests/topic_listener.cpp?view=diff&rev=486797&r1=486796&r2=486797
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/tests/topic_listener.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/tests/topic_listener.cpp Wed Dec 13 11:03:52 
2006
@@ -18,6 +18,20 @@
  * under the License.
  *
  */
+
+/**
+ * This file provides one half of a test and example of a pub-sub
+ * style of interaction. See topic_publisher.cpp for the other half,
+ * in which the logic for publishing is defined.
+ * 
+ * This file contains the listener logic. A listener will subscribe to
+ * a logical 'topic'. It will count the number of messages it receives
+ * and the time elapsed between the first one and the last one. It
+ * recognises two types of 'special' message that tell it to (a) send
+ * a report containing this information, (b) shutdown (i.e. stop
+ * listening).
+ */
+
 #include <QpidError.h>
 #include <ClientChannel.h>
 #include <Connection.h>
@@ -32,6 +46,10 @@
 using namespace qpid::sys;
 using std::string;
 
+/**
+ * A message listener implementation in which the runtime logic is
+ * defined.
+ */
 class Listener : public MessageListener{    
     Channel* const channel;
     const std::string responseQueue;
@@ -47,6 +65,9 @@
     virtual void received(Message& msg);
 };
 
+/**
+ * A utility class for managing the options passed in.
+ */
 class Args{
     string host;
     int port;
@@ -69,6 +90,11 @@
     inline bool getHelp() const { return help; }
 };
 
+/**
+ * The main routine creates a Listener instance and sets it up to
+ * consume from a private queue bound to the exchange with the
+ * appropriate topic name.
+ */
 int main(int argc, char** argv){
     Args args;
     args.parse(argc, argv);

Modified: incubator/qpid/trunk/qpid/cpp/tests/topic_publisher.cpp
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/tests/topic_publisher.cpp?view=diff&rev=486797&r1=486796&r2=486797
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/tests/topic_publisher.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/tests/topic_publisher.cpp Wed Dec 13 11:03:52 
2006
@@ -18,6 +18,22 @@
  * under the License.
  *
  */
+
+/**
+ * This file provides one half of a test and example of a pub-sub
+ * style of interaction. See topic_listener.cpp for the other half, in
+ * which the logic for subscribers is defined.
+ * 
+ * This file contains the publisher logic. The publisher will send a
+ * number of messages to the exchange with the appropriate routing key
+ * for the logical 'topic'. Once it has done this it will then send a
+ * request that each subscriber report back with the number of message
+ * it has received and the time that elapsed between receiving the
+ * first one and receiving the report request. Once the expected
+ * number of reports are received, it sends out a request that each
+ * subscriber shutdown.
+ */
+
 #include <QpidError.h>
 #include <ClientChannel.h>
 #include <Connection.h>
@@ -34,6 +50,11 @@
 using namespace qpid::sys;
 using std::string;
 
+/**
+ * The publishing logic is defined in this class. It implements
+ * message listener and can therfore be used to receive messages sent
+ * back by the subscribers.
+ */
 class Publisher : public MessageListener{    
     Channel* const channel;
     const std::string controlTopic;
@@ -51,6 +72,9 @@
     void terminate();
 };
 
+/**
+ * A utility class for managing the options passed in to the test
+ */
 class Args{
     string host;
     int port;


Reply via email to