File tree Expand file tree Collapse file tree 6 files changed +99
-9
lines changed Expand file tree Collapse file tree 6 files changed +99
-9
lines changed Original file line number Diff line number Diff line change @@ -101,4 +101,7 @@ option(CPPZMQ_BUILD_TESTS "Whether or not to build the tests" ON)
101101if (CPPZMQ_BUILD_TESTS)
102102 enable_testing ()
103103 add_subdirectory (tests)
104+ if (CMAKE_CXX_STANDARD AND NOT CMAKE_CXX_STANDARD EQUAL 98 AND CMAKE_CXX_STANDARD GREATER_EQUAL 11)
105+ add_subdirectory (examples)
106+ endif ()
104107endif ()
Original file line number Diff line number Diff line change @@ -53,18 +53,22 @@ int main()
5353 sock.send(zmq::str_buffer("Hello, world"), zmq::send_flags::dontwait);
5454}
5555```
56- This a more complex example where we send and receive multi-part messages.
56+ This a more complex example where we send and receive multi-part messages over TCP with a wildcard port .
5757``` c++
5858#include < iostream>
5959#include < zmq_addon.hpp>
6060
6161int main ()
6262{
6363 zmq::context_t ctx;
64- zmq::socket_t sock1(ctx, zmq::socket_type::pair);
65- zmq::socket_t sock2(ctx, zmq::socket_type::pair);
66- sock1.bind("inproc://test");
67- sock2.connect("inproc://test");
64+ zmq::socket_t sock1(ctx, zmq::socket_type::push);
65+ zmq::socket_t sock2(ctx, zmq::socket_type::pull);
66+ sock1.bind("tcp://127.0.0.1:*");
67+ const std::string last_endpoint =
68+ sock1.get(zmq::sockopt::last_endpoint);
69+ std::cout << "Connecting to "
70+ << last_endpoint << std::endl;
71+ sock2.connect(last_endpoint);
6872
6973 std::array<zmq::const_buffer, 2> send_msgs = {
7074 zmq::str_buffer ("foo"),
@@ -84,6 +88,8 @@ int main()
8488}
8589```
8690
91+ See the ` examples ` directory for more examples. When the project is compiled with tests enabled, each example gets compiled to an executable.
92+
8793Compatibility Guidelines
8894========================
8995
Original file line number Diff line number Diff line change 1+ cmake_minimum_required (VERSION 3.0 FATAL_ERROR)
2+
3+ project (cppzmq-examples CXX)
4+
5+ # place binaries and libraries according to GNU standards
6+
7+ include (GNUInstallDirs)
8+ set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} /${CMAKE_INSTALL_LIBDIR} )
9+ set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} /${CMAKE_INSTALL_LIBDIR} )
10+ set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} /${CMAKE_INSTALL_BINDIR} )
11+
12+ find_package (Threads)
13+
14+ add_executable (
15+ pubsub_multithread_inproc
16+ pubsub_multithread_inproc.cpp
17+ )
18+ target_link_libraries (
19+ pubsub_multithread_inproc
20+ PRIVATE cppzmq ${CMAKE_THREAD_LIBS_INIT}
21+ )
22+
23+ add_executable (
24+ hello_world
25+ hello_world.cpp
26+ )
27+ target_link_libraries (
28+ hello_world
29+ PRIVATE cppzmq ${CMAKE_THREAD_LIBS_INIT}
30+ )
31+
32+ add_executable (
33+ multipart_messages
34+ multipart_messages.cpp
35+ )
36+ target_link_libraries (
37+ multipart_messages
38+ PRIVATE cppzmq ${CMAKE_THREAD_LIBS_INIT}
39+ )
Original file line number Diff line number Diff line change 1+ #include < zmq.hpp>
2+
3+ int main ()
4+ {
5+ zmq::context_t ctx;
6+ zmq::socket_t sock (ctx, zmq::socket_type::push);
7+ sock.bind (" inproc://test" );
8+ sock.send (zmq::str_buffer (" Hello, world" ), zmq::send_flags::dontwait);
9+ }
Original file line number Diff line number Diff line change 1+ #include < iostream>
2+ #include < zmq_addon.hpp>
3+
4+ int main ()
5+ {
6+ zmq::context_t ctx;
7+ zmq::socket_t sock1 (ctx, zmq::socket_type::push);
8+ zmq::socket_t sock2 (ctx, zmq::socket_type::pull);
9+ sock1.bind (" tcp://127.0.0.1:*" );
10+ const std::string last_endpoint =
11+ sock1.get (zmq::sockopt::last_endpoint);
12+ std::cout << " Connecting to "
13+ << last_endpoint << std::endl;
14+ sock2.connect (last_endpoint);
15+
16+ std::array<zmq::const_buffer, 2 > send_msgs = {
17+ zmq::str_buffer (" foo" ),
18+ zmq::str_buffer (" bar!" )
19+ };
20+ if (!zmq::send_multipart (sock1, send_msgs))
21+ return 1 ;
22+
23+ std::vector<zmq::message_t > recv_msgs;
24+ const auto ret = zmq::recv_multipart (
25+ sock2, std::back_inserter (recv_msgs));
26+ if (!ret)
27+ return 1 ;
28+ std::cout << " Got " << *ret
29+ << " messages" << std::endl;
30+ return 0 ;
31+ }
Original file line number Diff line number Diff line change @@ -40,9 +40,10 @@ void SubscriberThread1(zmq::context_t *ctx) {
4040 zmq::recv_result_t result =
4141 zmq::recv_multipart (subscriber, std::back_inserter (recv_msgs));
4242 assert (result && " recv failed" );
43+ assert (*result == 2 );
4344
44- std::cout << " Thread2: [" << recv_msgs[0 ].to_string_view () << " ] "
45- << recv_msgs[1 ].to_string_view () << std::endl;
45+ std::cout << " Thread2: [" << recv_msgs[0 ].to_string () << " ] "
46+ << recv_msgs[1 ].to_string () << std::endl;
4647 }
4748}
4849
@@ -60,9 +61,10 @@ void SubscriberThread2(zmq::context_t *ctx) {
6061 zmq::recv_result_t result =
6162 zmq::recv_multipart (subscriber, std::back_inserter (recv_msgs));
6263 assert (result && " recv failed" );
64+ assert (*result == 2 );
6365
64- std::cout << " Thread3: [" << recv_msgs[0 ].to_string_view () << " ] "
65- << recv_msgs[1 ].to_string_view () << std::endl;
66+ std::cout << " Thread3: [" << recv_msgs[0 ].to_string () << " ] "
67+ << recv_msgs[1 ].to_string () << std::endl;
6668 }
6769}
6870
You can’t perform that action at this time.
0 commit comments