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