<?php
declare(strict_types=1);
require(__DIR__ . '/vendor/autoload.php');
ini_set('assert.active', '1');
ini_set('assert.warning', '1');
ini_set('assert.bail', '1');
ini_set('display_errors', 'on');
error_reporting(E_ALL);
$exit = 1;
register_shutdown_function(function() use(&$exit): void {
exit($exit);
});
$loop = React\EventLoop\Factory::create();
$resolver = (new React\Dns\Resolver\Factory)->create('8.8.8.8', $loop);
$ping = new Adawolfa\ICMP\Ping($loop, $resolver);
$mask = 0b0000;
$ping->ping('localhost', .5)->then(function(float $time) use(&$mask): void {
$mask |= 0b1000;
printf("ping(localhost): OK\n");
}, function(Exception $exception): void {
assert(false, (string) $exception);
});
$ping->ping('10.99.99.99', .5)->then(function(float $time): void {
assert(false, (string) $time);
}, function(Exception $exception) use(&$mask): void {
printf("ping(10.99.99.99): OK\n");
assert($exception);
$mask |= 0b0100;
});
$count = 0;
$stop = $ping->periodic('127.0.0.1', function(float $time, Exception $exception = null) use(&$mask, &$stop, &$count): void {
if ($count === 3) {
printf("ping(127.0.0.1) [3]: OK\n");
assert($exception);
assert('Interrupted.' === $exception->getMessage());
$mask |= 0b0010;
} else {
printf("ping(127.0.0.1) [%d]: OK\n", $count);
assert($exception === null);
}
if (++$count === 3) {
$stop();
}
}, .1, .5);
$count2 = 0;
$stop2 = $ping->periodic('10.99.99.99', function(float $time, Exception $exception = null) use(&$mask, &$stop2, &$count2): void {
if ($count2 === 3) {
printf("ping(10.99.99.99) [3]: OK\n");
assert($exception);
assert('Interrupted.' === $exception->getMessage());
$mask |= 0b0001;
} else {
printf("ping(127.0.0.1) [%d]: OK\n", $count2);
assert($exception);
}
if (++$count2 === 3) {
$stop2();
}
}, .1, .5);
$loop->run();
assert(0b1111 === $mask, (string) $mask);
$exit = 0;