Exemplo n.º 1
0
 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);
 }
Exemplo n.º 2
0
 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);
 }
Exemplo n.º 3
0
 /**
  * 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();
 }
Exemplo n.º 4
0
 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]);
 }
Exemplo n.º 5
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);
     }
 }
Exemplo n.º 6
0
 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);
 }
Exemplo n.º 7
0
 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);
 }
Exemplo n.º 8
0
<?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
Exemplo n.º 9
0
<?php

require __DIR__ . '/../vendor/autoload.php';
$args = getopt('i:o:t:');
$if = isset($args['i']) ? $args['i'] : '/dev/zero';
$of = isset($args['o']) ? $args['o'] : '/dev/null';
$t = isset($args['t']) ? $args['t'] : 1;
// passing file descriptors requires mapping paths (https://bugs.php.net/bug.php?id=53465)
$if = str_replace('/dev/fd/', 'php://fd/', $if);
$of = str_replace('/dev/fd/', 'php://fd/', $of);
$loop = new React\EventLoop\StreamSelectLoop();
// setup information stream
$info = new React\Stream\Stream(STDERR, $loop);
$info->pause();
if (extension_loaded('xdebug')) {
    $info->write('NOTICE: The "xdebug" extension is loaded, this has a major impact on performance.' . PHP_EOL);
}
$info->write('piping from ' . $if . ' to ' . $of . ' (for max ' . $t . ' second(s)) ...' . PHP_EOL);
// setup input and output streams and pipe inbetween
$in = new React\Stream\Stream(fopen($if, 'r'), $loop);
$out = new React\Stream\Stream(fopen($of, 'w'), $loop);
$out->pause();
$in->pipe($out);
// stop input stream in $t seconds
$start = microtime(true);
$timeout = $loop->addTimer($t, function () use($in, &$bytes) {
    $in->close();
});
// print stream position once stream closes
$in->on('close', function () use($in, $start, $timeout, $info) {
    $t = microtime(true) - $start;
Exemplo n.º 10
0
<?php

// script to check for memory leaks
require __DIR__ . '/../../../vendor/autoload.php';
$loop = new React\EventLoop\StreamSelectLoop();
class Zinger
{
    public $i = 0;
    public function zing($n, $callback)
    {
        $this->i++;
        $callback($n * 100);
    }
}
$zinger = new Zinger();
$server = new DNode\DNode($loop, $zinger);
$server->listen(7070);
$loop->addPeriodicTimer(2, function () use($zinger) {
    $kmem = memory_get_usage(true) / 1024;
    echo "Run: {$zinger->i}\n";
    echo "Memory: {$kmem} KiB\n";
});
$loop->run();
Exemplo n.º 11
0
<?php

// script to check for memory leaks
require __DIR__ . '/../../../vendor/autoload.php';
$loop = new React\EventLoop\StreamSelectLoop();
$i = 0;
$loop->addPeriodicTimer(0.001, function () use($loop, &$i) {
    $i++;
    $client = new DNode\DNode($loop);
    $client->connect(7070, function ($remote, $conn) {
        $remote->zing(33, function ($n) use($conn) {
            $conn->end();
        });
    });
});
$loop->addPeriodicTimer(2, function () use(&$i) {
    $kmem = memory_get_usage(true) / 1024;
    echo "Run: {$i}\n";
    echo "Memory: {$kmem} KiB\n";
});
$loop->run();
Exemplo n.º 12
0
<?php

require __DIR__ . '/../vendor/autoload.php';
$loop = new React\EventLoop\StreamSelectLoop();
$i = 0;
$loop->addPeriodicTimer(0.001, function () use(&$i, $loop) {
    $i++;
    // $loop->addTimer(1, function ($signature) {
    // });
    $loop->addPeriodicTimer(1, function ($signature) use($loop) {
        $loop->cancelTimer($signature);
    });
});
$loop->addPeriodicTimer(2, function () use(&$i) {
    $kmem = memory_get_usage(true) / 1024;
    echo "Run: {$i}\n";
    echo "Memory: {$kmem} KiB\n";
});
$loop->run();
Exemplo n.º 13
0
<?php

// script to test for mem leaks
// You can test it using:
// siege localhost:8080
require __DIR__ . '/../vendor/autoload.php';
$loop = new React\EventLoop\StreamSelectLoop();
$socket = new React\Socket\Server($loop);
$http = new React\Http\Server($socket, $loop);
$i = 0;
$http->on('request', function ($request, $response) use(&$i) {
    $i++;
    $response->writeHead();
    $response->end("Hello World!\n");
});
$loop->addPeriodicTimer(2, function () use(&$i) {
    $kmem = memory_get_usage(true) / 1024;
    echo "Request: {$i}\n";
    echo "Memory: {$kmem} KiB\n";
});
$socket->listen(8080);
$loop->run();