blob: 3e7670403022d9247f3d4cf586fb9fe6a1236886 [file] [log] [blame]
Alexander Afanasyev151a8552014-04-11 00:54:43 -07001Basic examples
2==============
3
4Trivial consumer
5----------------
6
7In the following trivial example, a consumer creates a Face with default transport (UnixSocket transport) and sends an Interest for ``/localhost/testApp/randomData``.
8While expressing Interest, the app specifies two callbacks to be called when Data is retrieved or Interest times out.
9
10``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.
11
12.. literalinclude:: ../examples/consumer.cpp
13 :language: c++
14 :linenos:
15 :emphasize-lines: 17-19,25-27,41-44,47
16
17
18Trivial producer
19----------------
20
21The following example demonstrates how to write a simple producer application.
22
23First, application sets interset filter for ``/localhost/testApp`` to receive all Interests that have this prefix.
24``setInterestFilter`` call accepts two callbacks, one which will be called when an Interest is received, and the other if prefix registration (i.e., configuring proper FIB entry in NFD) fails.
25
26After Interest is received, a producer creates a Data packet with the same name as in the received Interest, adds a silly content, and signs the Data packet with the system-default identity.
27It is possible to specify a particular key to be used during the signing.
28For more information, refer to KeyChain API documentation.
29
30Finally, after Data packet has been created and signed, it is returned to the requester using ``Face::put`` method.
31
32.. literalinclude:: ../examples/producer.cpp
33 :language: c++
34 :linenos:
35 :emphasize-lines: 37-40,43,49,63-65
36
37
38Consumer that uses ndn::Scheduler
39---------------------------------
40
41The following example demonstrates use for ``ndn::Scheduler`` to schedule an arbitrary events for execution at specific points of time.
42
43The 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).
44In 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 ``Face::processEvents`` as in previous examples).
45``ndn::Scheduler`` is just a wrapper on top of ``boost::asio::io_service``, allowing simple interface to schedule tasks at specific times.
46
47The highlighted lines in the example demonstrate all that is needed to express a second interest approximately 2 seconds after the first one.
48
49.. literalinclude:: ../examples/consumer-with-timer.cpp
50 :language: c++
51 :linenos:
52 :emphasize-lines: 10,62,69,72-73,76