| Trivial applications |
| ==================== |
| |
| .. note:: |
| |
| To successfully run the following examples, please make sure that NFD is properly |
| configured and running. For more information about NFD, refer to `NFD's official |
| homepage <http://named-data.net/doc/NFD/>`_. |
| |
| Trivial consumer |
| ---------------- |
| |
| In the following trivial example, a consumer creates a :ndn-cxx:`Face` with default |
| transport (:ndn-cxx:`UnixTransport`) and sends an Interest for |
| ``/localhost/testApp/randomData``. While expressing Interest, the app specifies two |
| callbacks to be called when Data is retrieved or Interest times out. |
| |
| ``ndn::bind`` is an alias for either `boost::bind |
| <http://www.boost.org/doc/libs/1_55_0/libs/bind/bind.html>`_ or `std::bind |
| <http://en.cppreference.com/w/cpp/utility/functional/bind>`_ when the library is compiled |
| in C++11 mode. |
| |
| .. literalinclude:: ../examples/consumer.cpp |
| :language: c++ |
| :linenos: |
| :emphasize-lines: 24-26,32-34,48-52,54 |
| |
| |
| Trivial producer |
| ---------------- |
| |
| The following example demonstrates how to write a simple producer application. |
| |
| First, the application sets an Interest filter for ``/localhost/testApp`` to receive all |
| Interests that have this prefix. The :ndn-cxx:`Face::setInterestFilter` call accepts two |
| callbacks; the first will be called when an Interest is received and the second if prefix |
| registration fails. |
| |
| After an Interest is received, the producer creates a Data packet with the same name as |
| the received Interest, adds content, and signs it with the system-default identity. It is |
| also possible to specify a particular key to be used during the signing. For more |
| information, refer to :ndn-cxx:`KeyChain API documentation <KeyChain>`. |
| |
| Finally, after Data packet has been created and signed, it is returned to the requester |
| using :ndn-cxx:`Face::put` method. |
| |
| .. literalinclude:: ../examples/producer.cpp |
| :language: c++ |
| :linenos: |
| :emphasize-lines: 44-47,50,56,71-74 |
| |
| |
| Consumer that uses ndn::Scheduler |
| --------------------------------- |
| |
| The following example demonstrates how to use :ndn-cxx:`ndn::Scheduler` to schedule arbitrary |
| events for execution at specific points of time. |
| |
| The library internally uses `boost::asio::io_service |
| <http://www.boost.org/doc/libs/1_48_0/doc/html/boost_asio/reference/io_service.html>`_ to |
| implement fully asynchronous NDN operations (i.e., sending and receiving Interests and |
| Data). In addition to network-related operations, ``boost::asio::io_service`` can be used |
| to execute any arbitrary callback within the processing thread (run either explicitly via |
| ``io.run`` or implicitly via :ndn-cxx:`Face::processEvents` as in previous examples). |
| :ndn-cxx:`ndn::Scheduler` is just a wrapper on top of ``boost::asio::io_service``, |
| allowing simple interface to schedule tasks at specific times. |
| |
| The highlighted lines in the example demonstrate all that is needed to express a second |
| Interest approximately 2 seconds after the first one. |
| |
| .. literalinclude:: ../examples/consumer-with-timer.cpp |
| :language: c++ |
| :linenos: |
| :emphasize-lines: 19,61,76,79-80,83 |