Mercurial > code
diff C++/examples/Socket/stream-client.cpp @ 463:214f03b47d4e
Socket:
- New action() and condition() function to check for pending events,
- More documentation,
- StreamServer, StreamClient can now complete recv/send operation for OpenSSL.
author | David Demelier <markand@malikania.fr> |
---|---|
date | Wed, 04 Nov 2015 18:01:22 +0100 |
parents | |
children | 5a9671dabb15 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/C++/examples/Socket/stream-client.cpp Wed Nov 04 18:01:22 2015 +0100 @@ -0,0 +1,66 @@ +/* + * stream-server -- example of stream server + * + * Options: + * - WITH_PORT (int) which port to use (default: 12000) + * - WITH_HOST (string literal) which host to connect (default: "localhost") + * - WITH_SSL (bool) true to use SSL (default: false) + */ + +#include <iostream> + +#include "Sockets.h" + +#if !defined(WITH_PORT) +# define WITH_PORT 12000 +#endif + +#if !defined(WITH_HOST) +# define WITH_HOST "localhost" +#endif + +#if defined(WITH_SSL) +using Client = net::StreamClient<net::Ipv4, net::Tls>; +#else +using Client = net::StreamClient<net::Ipv4, net::Tcp>; +#endif + +int main() +{ + Client client; + + /* + * Unfortunately at the moment the socket state is not changed, this will be done + * in the future. + */ + bool connected{true}; + + client.setConnectionHandler([&] () { + std::cout << "client: successfully connected" << std::endl; + client.send("Hello world!"); + }); + client.setDisconnectionHandler([&] () { + std::cout << "client: disconnected" << std::endl; + connected = false; + }); + client.setErrorHandler([&] (const net::Error &error) { + std::cout << "client: error: " << error.function() << ": " << error.what() << std::endl; + connected = false; + }); + client.setReadHandler([] (const std::string &data) { + std::cout << "client: received: " << data << std::endl; + }); + client.setWriteHandler([] (const std::string &data) { + std::cout << "client: sent: " << data << std::endl; + }); + + client.connect(net::Ipv4{WITH_HOST, WITH_PORT}); + + while (connected) { + client.poll(); + } + + std::cout << "client: exiting" << std::endl; + + return 0; +} \ No newline at end of file