public function testWaterfallWithTasks() { $loop = new \React\EventLoop\StreamSelectLoop(); $tasks = array(function ($callback, $errback) use($loop) { $loop->addTimer(0.05, function () use($callback) { $callback('foo'); }); }, function ($foo, $callback, $errback) use($loop) { $loop->addTimer(0.05, function () use($callback, $foo) { $callback($foo . 'bar'); }); }, function ($bar, $callback, $errback) use($loop) { $loop->addTimer(0.05, function () use($callback, $bar) { $callback($bar . 'baz'); }); }); $callback = $this->createCallableMock($this->once(), 'foobarbaz'); $errback = $this->createCallableMock($this->never()); Util::waterfall($tasks, $callback, $errback); $timer = new Timer($this); $timer->start(); $loop->run(); $timer->stop(); $timer->assertInRange(0.15, 0.3); }
public function testListener() { $hadInbound = false; $hadOutbound = false; $inbndPeer = null; $loop = new \React\EventLoop\StreamSelectLoop(); $factory = new \BitWasp\Bitcoin\Networking\Factory($loop); $peerFactory = $factory->getPeerFactory($factory->getDns()); $serverAddr = $peerFactory->getAddress('127.0.0.1', 31234); $server = $peerFactory->getServer(); $listener = $peerFactory->getListener($server); $listener->on('connection', function (Peer $peer) use(&$hadInbound, $listener, &$inbndPeer) { $hadInbound = true; $inbndPeer = $peer; $listener->close(); }); $listener->listen($serverAddr->getPort()); $peerFactory->getPeer()->connect($peerFactory->getConnector(), $serverAddr)->then(function (Peer $peer) use(&$hadOutbound) { $hadOutbound = true; $peer->close(); }); $loop->run(); $this->assertTrue($hadInbound); $this->assertTrue($hadOutbound); $this->assertInstanceOf('BitWasp\\Bitcoin\\Networking\\Peer\\Peer', $inbndPeer); }
/** * Running HTTP Server */ public function run() { $loop = new \React\EventLoop\StreamSelectLoop(); $socket = new \React\Socket\Server($loop); $http = new \React\Http\Server($socket, $loop); $http->on('request', function ($request, $response) { with(new HttpSession($this->host, $this->port, $this->verbose))->handle($request, $response); }); $socket->listen($this->port, $this->host); $loop->run(); }
public function testQuerySeeds() { $loop = new \React\EventLoop\StreamSelectLoop(); $factory = new \BitWasp\Bitcoin\Networking\Factory($loop); $peerFactory = $factory->getPeerFactory($factory->getDns()); $locator = $peerFactory->getLocator(); $foundHosts = null; $locator->queryDnsSeeds()->then(function (Locator $locator) use(&$foundHosts) { $foundHosts = $locator->getKnownAddresses(); }); $loop->run(); $this->assertInternalType('array', $foundHosts); $this->assertNotEmpty($foundHosts); $this->assertInstanceOf('\\BitWasp\\Bitcoin\\Networking\\Structure\\NetworkAddressInterface', $foundHosts[0]); }
public function get($name, $params, $callback) { try { $bestHost = $this->getBestService($name); if ($bestHost === false) { return false; } $loop = new \React\EventLoop\StreamSelectLoop(); $dnode = new \DNode\DNode($loop); $dnode->connect($bestHost['ip'], $bestHost['port'], function ($remote, $connection) use($bestHost, $params, $callback) { $remote->{$bestHost['call_name']}($params, function ($n) use($connection, $callback) { $connection->end(); $callback($n); }); }); $loop->run(); } catch (\Exception $e) { error_log($e->getMessage()); $callback(false); } }
public function testParallelWithDelayedError() { $called = 0; $loop = new \React\EventLoop\StreamSelectLoop(); $tasks = array(function ($callback, $errback) use(&$called) { $callback('foo'); $called++; }, function ($callback, $errback) use($loop) { $loop->addTimer(0.001, function () use($errback) { $e = new \RuntimeException('whoops'); $errback($e); }); }, function ($callback, $errback) use(&$called) { $callback('bar'); $called++; }); $callback = $this->createCallableMock($this->never()); $errback = $this->createCallableMock($this->once()); Util::parallel($tasks, $callback, $errback); $loop->run(); $this->assertSame(2, $called); }
public function testConnectingToPeerRequestingRelay() { $loop = new \React\EventLoop\StreamSelectLoop(); $factory = new \BitWasp\Bitcoin\Networking\Factory($loop); $peerFactory = $factory->getPeerFactory($factory->getDns()); $locator = $peerFactory->getLocator(); $manager = $peerFactory->getManager(true); $deferred = new Deferred(); $onInv = function (Peer $peer, Inv $inv) use($deferred, $loop) { foreach ($inv->getItems() as $item) { if ($item->isTx()) { $peer->close(); $deferred->resolve($item); } } }; $onSeeds = function (Locator $locator) use($manager, $deferred, $onInv, $loop) { for ($i = 0; $i < 8; $i++) { $manager->connectNextPeer($locator)->then(function (Peer $peer) use($onInv) { $peer->on('inv', $onInv); }, function ($err) use($loop) { $loop->stop(); }); } }; $locator->queryDnsSeeds(1)->then($onSeeds, function ($err) use($loop) { $loop->stop(); }); $receivedTx = false; $deferred->promise()->then(function () use(&$receivedTx) { $receivedTx = true; })->always(function () use($loop) { $loop->stop(); }); $loop->run(); $this->assertTrue($receivedTx); }
<?php require_once __DIR__ . '/../bootstrap.php'; $loop = new \React\EventLoop\StreamSelectLoop(); $scheduler = new \Rx\Scheduler\EventLoopScheduler($loop); Rx\Observable::interval(1000)->timeout(500)->subscribe($createStdoutObserver("One second - "), $scheduler); Rx\Observable::interval(100)->take(3)->timeout(500)->subscribe($createStdoutObserver("100 ms - "), $scheduler); $loop->run(); // Output: //100 ms - Next value: 0 //100 ms - Next value: 1 //100 ms - Next value: 2 //100 ms - Complete! //One second - Exception: timeout