diff options
author | marvin-borner@live.com | 2018-04-10 21:50:16 +0200 |
---|---|---|
committer | marvin-borner@live.com | 2018-04-10 21:54:48 +0200 |
commit | fc9401f04a3aca5abb22f87ebc210de8afe11d32 (patch) | |
tree | b0b310f3581764ec3955f4e496a05137a32951c3 /assets/php/vendor/react/socket/examples/21-netcat-client.php | |
parent | 286d643180672f20526f3dc3bd19d7b751e2fa97 (diff) |
Initial Commit
Diffstat (limited to 'assets/php/vendor/react/socket/examples/21-netcat-client.php')
-rw-r--r-- | assets/php/vendor/react/socket/examples/21-netcat-client.php | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/assets/php/vendor/react/socket/examples/21-netcat-client.php b/assets/php/vendor/react/socket/examples/21-netcat-client.php new file mode 100644 index 0000000..9140e2c --- /dev/null +++ b/assets/php/vendor/react/socket/examples/21-netcat-client.php @@ -0,0 +1,68 @@ +<?php + +// Simple plaintext TCP/IP and secure TLS client example that pipes console I/O. +// This shows how a plaintext TCP/IP or secure TLS connection is established and +// then everything you type on STDIN will be sent and everything the server +// sends will be piped to your STDOUT. +// +// $ php examples/21-netcat-client.php www.google.com:80 +// $ php examples/21-netcat-client.php tls://www.google.com:443 + +use React\EventLoop\Factory; +use React\Socket\Connector; +use React\Socket\ConnectionInterface; +use React\Stream\ReadableResourceStream; +use React\Stream\WritableResourceStream; + +require __DIR__ . '/../vendor/autoload.php'; + +if (!defined('STDIN')) { + echo 'STDIO streams require CLI SAPI' . PHP_EOL; + exit(1); +} + +if (DIRECTORY_SEPARATOR === '\\') { + fwrite(STDERR, 'Non-blocking console I/O not supported on Microsoft Windows' . PHP_EOL); + exit(1); +} + +if (!isset($argv[1])) { + fwrite(STDERR, 'Usage error: required argument <host:port>' . PHP_EOL); + exit(1); +} + +$loop = Factory::create(); +$connector = new Connector($loop); + +$stdin = new ReadableResourceStream(STDIN, $loop); +$stdin->pause(); +$stdout = new WritableResourceStream(STDOUT, $loop); +$stderr = new WritableResourceStream(STDERR, $loop); + +$stderr->write('Connecting' . PHP_EOL); + +$connector->connect($argv[1])->then(function (ConnectionInterface $connection) use ($stdin, $stdout, $stderr) { + // pipe everything from STDIN into connection + $stdin->resume(); + $stdin->pipe($connection); + + // pipe everything from connection to STDOUT + $connection->pipe($stdout); + + // report errors to STDERR + $connection->on('error', function ($error) use ($stderr) { + $stderr->write('Stream ERROR: ' . $error . PHP_EOL); + }); + + // report closing and stop reading from input + $connection->on('close', function () use ($stderr, $stdin) { + $stderr->write('[CLOSED]' . PHP_EOL); + $stdin->close(); + }); + + $stderr->write('Connected' . PHP_EOL); +}, function ($error) use ($stderr) { + $stderr->write('Connection ERROR: ' . $error . PHP_EOL); +}); + +$loop->run(); |