Example #1
0
 public function setUp()
 {
     $this->loop = React\EventLoop\Factory::create();
     $dnsResolverFactory = new React\Dns\Resolver\Factory();
     $dns = $dnsResolverFactory->createCached('8.8.8.8', $this->loop);
     $this->factory = new Factory($this->loop, $dns);
 }
Example #2
0
 private function getData($message)
 {
     $loop = React\EventLoop\Factory::create();
     $tcpConnector = new TcpConnector($loop);
     $i = 0;
     $status_text = "";
     $services = $this->services;
     //$this->services->log('Starting connector');
     $tcpConnector->create($this->host, $this->port)->then(function (React\Stream\Stream $stream) use(&$status_text, $message, $services) {
         $command_count = 0;
         $stream->on('data', function ($data) use(&$command_count, $stream, &$status_text, $message) {
             if ($command_count == 0) {
                 //$services->log($message);
                 $hash = $this->generateHash($data, $command_count, $message);
                 $_message = sprintf("%s %s\n", $hash, $message);
                 $stream->write($_message);
                 $command_count++;
             } else {
                 $status_text .= $data;
                 if (substr($status_text, strlen($status_text) - 1, 1) == "\n") {
                     $stream->end();
                 }
             }
         });
     });
     $loop->run();
     $status_text = str_replace(['{', '}', '(', ')', '%', 'undef', '*::FH'], ['[', ']', '[', ']', '$', 'null', 'null'], $status_text);
     return $status_text;
 }
Example #3
0
function goForIt()
{
    $mongo = new MongoClient();
    $emails = $mongo->selectDB('emails_tester')->selectCollection('emails');
    $servers = ['tcp://gmail-smtp-in.l.google.com:25', 'tcp://alt1.gmail-smtp-in.l.google.com:25', 'tcp://alt2.gmail-smtp-in.l.google.com:25', 'tcp://alt3.gmail-smtp-in.l.google.com:25', 'tcp://alt4.gmail-smtp-in.l.google.com:25'];
    /** @var Client[] $clients */
    $clients = [];
    $loop = React\EventLoop\Factory::create();
    $logger = new \Zend\Log\Logger();
    $writer = new \Zend\Log\Writer\Stream('php://output');
    $logger->addWriter($writer);
    $logger->info('Creating clients.');
    $start = microtime(1);
    $checked = 0;
    for ($i = 0; $i < 100; $i++) {
        $client = new Client($loop, function ($record) use(&$checked, $emails, $start, $logger) {
            $record['state'] = 'valid';
            $emails->save($record);
            $checked++;
            if ($checked % 1000 == 0) {
                $logger->info("Checked: {$checked}. Speed: " . $checked / (microtime(1) - $start) . " emails/sec.");
            }
        }, function ($record, $reason) use(&$checked, $emails, $start, $logger) {
            $record['state'] = 'invalid';
            $emails->save($record);
            if ($reason !== false) {
                $logger->warn("Email <{$record['email']}> failed check: {$reason}");
            }
            $checked++;
            if ($checked % 1000 == 0) {
                $logger->info("Checked: {$checked}. Speed: " . $checked / (microtime(1) - $start) . " emails/sec.");
            }
        });
        $clients[] = $client;
    }
    $logger->info('Done.');
    $loop->addPeriodicTimer(0.001, function () use($clients, $emails, $servers, $logger) {
        foreach ($clients as $c) {
            if ($c->getState() === Client::STATE_DISCONNECTED) {
                $logger->info(spl_object_hash($c) . ": connecting...");
                $c->connect($servers[mt_rand(0, count($servers) - 1)]);
                return;
            }
            if ($c->getState() === Client::STATE_BUSY) {
                continue;
            }
            if ($c->getState() === Client::STATE_IDLE) {
                $record = $emails->findOne(['state' => ['$exists' => false]]);
                if (!isset($record['email'])) {
                    continue;
                }
                $record['state'] = 'in_progress';
                $emails->save($record);
                $c->checkEmail($record);
                continue;
            }
        }
    });
    $loop->run();
}
Example #4
0
 public function setUp()
 {
     $loop = React\EventLoop\Factory::create();
     $dnsResolverFactory = new React\Dns\Resolver\Factory();
     $dns = $dnsResolverFactory->createCached('8.8.8.8', $loop);
     $factory = new Socks\Factory($loop, $dns);
     $this->client = $factory->createClient('127.0.0.1', 9050);
 }
 public function setUp()
 {
     $this->loop = React\EventLoop\Factory::create();
     $factory = new Factory($this->loop);
     $promise = $factory->createClient('http://www.thomas-bayer.com/axis2/services/BLZService?wsdl');
     $this->expectPromiseResolve($promise);
     $this->client = Block\await($promise, $this->loop);
     /* @var $client Client */
 }
Example #6
0
 public function setUp()
 {
     $this->loop = React\EventLoop\Factory::create();
     $socket = $this->createSocketServer();
     $this->port = $socket->getPort();
     $this->assertNotEquals(0, $this->port);
     $this->server = new Server($this->loop, $socket);
     $this->connector = new TcpConnector($this->loop);
     $this->client = new Client('127.0.0.1:' . $this->port, $this->connector);
 }
function pull_routine()
{
    $loop = React\EventLoop\Factory::create();
    $context = new React\ZMQ\Context($loop);
    $socket = $context->getSocket(ZMQ::SOCKET_PULL);
    $socket->bind('ipc://test.ipc');
    $socket->on('message', function () {
        echo "-";
    });
    $loop->run();
}
Example #8
0
 public function testConstructor()
 {
     $loop = React\EventLoop\Factory::create();
     try {
         $icmp = new Icmp($loop);
     } catch (Exception $e) {
         if ($e->getCode() === SOCKET_EPERM) {
             // skip if not root
             return $this->markTestSkipped('No access to create socket (only root can do so)');
         }
         throw $e;
     }
     $this->assertInstanceOf('Clue\\React\\Icmp\\Icmp', $icmp);
     return $icmp;
 }
function push_routine()
{
    $loop = React\EventLoop\Factory::create();
    $context = new React\ZMQ\Context($loop);
    $socket = $context->getSocket(ZMQ::SOCKET_PUSH);
    $socket->connect('ipc://test2.ipc');
    $loop->addPeriodicTimer(1, function () use($socket) {
        for ($n = 0; $n < rand(1, 30000); $n++) {
            if (rand(0, 100) >= 50) {
                echo "s";
                $socket->send('bogus-' . $n);
            } else {
                echo "m";
                $socket->send(array("bogus{$n}-1", "bogus{$n}-2", "bogus{$n}-3"));
            }
        }
    });
    $loop->run();
}
Example #10
0
function main()
{
    $loop = React\EventLoop\Factory::create();
    $socket = new React\Socket\Server($loop);
    $http = new React\Http\Server($socket, $loop);
    $st = new Storage('im.db');
    $http->on('request', function ($request, $response) use($st) {
        $r = new Request($request, $response);
        #       var_dump($r->request->getHeaders());
        if (!array_key_exists("Content-Length", $r->request->getHeaders())) {
            $r->abort(400, "need json content");
            return;
        }
        $r->contentLength = intval($r->request->getHeaders()["Content-Length"]);
        $request->on('data', function ($data) use($r, $st) {
            $r->addInput($data);
            if (!$r->readyToProcess()) {
                return;
            }
            if (!($js = $r->parseInput())) {
                $r->abort(400, "Invalid json");
                return;
            }
            global $methods;
            // imported it from Methods.php.
            // Failed to find how to import it explicitly
            // (like python's "import Variable from Module")
            if (!isset($js->method) || !array_key_exists($js->method, $methods)) {
                $r->abort(400, "Invalid method");
                return;
            }
            try {
                $methods[$js->method]($r, $js, $st);
            } catch (Exception $e) {
                $r->abort(500, "inernal server error");
            }
        });
    });
    echo "Server running at http://127.0.0.1:1337\n";
    $socket->listen(1337);
    $loop->run();
}
 /**
  * Execute the console command.
  *
  * @return mixed
  */
 public function fire()
 {
     $loop = React\EventLoop\Factory::create();
     $pusher = new LowEndPing\Pusher();
     $zmq_host = Config::get('lowendping.websocket.zeromq.host', '127.0.0.1') . ':' . Config::get('lowendping.websocket.zeromq.port', 5555);
     // Listen for the web server to make a ZeroMQ push after a response
     $context = new React\ZMQ\Context($loop);
     $pull = $context->getSocket(ZMQ::SOCKET_PULL);
     $this->info('Binding ZMQ to ' . $zmq_host);
     $pull->bind('tcp://' . $zmq_host);
     // Binding to 127.0.0.1 means the only client that can connect is itself
     $pull->on('message', array($pusher, 'onServerResponse'));
     $this->info('Binding Ratchet Websocket to 0.0.0.0:' . Config::get('lowendping.websocket.port', 8080));
     // Set up our WebSocket server for clients wanting real-time updates
     $webSock = new React\Socket\Server($loop);
     $webSock->listen(Config::get('lowendping.websocket.port', 8080), '0.0.0.0');
     // Binding to 0.0.0.0 means remotes can connect
     $webServer = new Ratchet\Server\IoServer(new Ratchet\Http\HttpServer(new Ratchet\WebSocket\WsServer(new Ratchet\Wamp\WampServer($pusher))), $webSock);
     $loop->run();
 }
 function run()
 {
     $this->before();
     $port = $this->setting['port'];
     Load::file(MAIN_DIR . DS . 'vendor' . DS . 'autoload.php');
     $loop = React\EventLoop\Factory::create();
     $socket = new React\Socket\Server($loop);
     $conns = new \SplObjectStorage();
     $this->connectionList =& $conns;
     $socket->on('connection', function ($conn) use($conns) {
         $this->onConnection($conn);
         $conns->attach($conn);
         $this->console('Attach new connection.');
         $conn->on('data', function ($data) use($conns, $conn) {
             $this->onMessage($conn, $data);
             //                foreach ($conns as $current) {
             //                    if ($conn !== $current) {
             //                        continue;
             //                    }
             //
             //                    $this->onMessage($conn, $data);
             //                }
         });
         $conn->on('end', function () use($conns, $conn) {
             $this->onClose($conn);
             $this->console('Detach connection.');
             $conns->detach($conn);
         });
     });
     $this->console('Socket server listening on port ' . $port);
     $socket->listen($port);
     $loop->addPeriodicTimer($this->setting['timer'], function ($timer) use($conns) {
         $this->onTick($timer);
     });
     $loop->run();
 }
Example #13
0
            $headers = array('Content-Type' => 'text/plain');
            $app['response']->writeHead(404, $headers);
            $app['response']->end('404');
            break;
        case FastRoute\Dispatcher::METHOD_NOT_ALLOWED:
            $allowedMethods = $routeInfo[1];
            // ... 405 Method Not Allowed
            $headers = array('Content-Type' => 'text/plain');
            $app['response']->writeHead(405, $headers);
            $app['response']->end('405');
            break;
        case FastRoute\Dispatcher::FOUND:
            $handler = $routeInfo[1];
            $vars = $routeInfo[2];
            // ... call $handler with $vars
            $app['vars'] = $vars;
            $handler_block = array_values(array_filter(explode('@', $handler)));
            $app['loader']->controller($app['path_block'][0], $handler_block[0], $app);
            $controller = new $handler_block[0]($app);
            $controller->{$handler_block}[1]();
            break;
    }
};
// 创建 Http Server 服务器。
$app['port'] = 1337;
$app['loop'] = React\EventLoop\Factory::create();
$app['socket'] = new React\Socket\Server($app['loop']);
$app['http'] = new React\Http\Server($app['socket']);
$app['http']->on('request', $httpKernel);
$app['socket']->listen($app['port']);
$app['loop']->run();
Example #14
0
 public function setUp()
 {
     $this->loop = React\EventLoop\Factory::create();
     $this->factory = new Datagram\Factory($this->loop, $this->createResolverMock());
 }
Example #15
0
 /**
  * Get the event loop instance.
  */
 public function getLoop()
 {
     return React\EventLoop\Factory::create();
 }
Example #16
0
 public function setUp()
 {
     $this->loop = React\EventLoop\Factory::create();
     $this->factory = new Factory($this->loop);
 }
Example #17
0
 public function setUp()
 {
     $this->loop = React\EventLoop\Factory::create();
     $this->connector = $this->getMock('React\\SocketClient\\ConnectorInterface');
     $this->client = new Client('127.0.0.1:1080', $this->connector);
 }
Example #18
0
 public static function setUpBeforeClass()
 {
     self::$address = getenv('LOGIN');
     self::$loop = React\EventLoop\Factory::create();
 }
Example #19
0
<?php

include_once __DIR__ . '/../vendor/autoload.php';
$loop = React\EventLoop\Factory::create();
$dnsResolverFactory = new React\Dns\Resolver\Factory();
$dns = $dnsResolverFactory->createCached('8.8.8.8', $loop);
$socket = new React\Socket\Server($loop);
$socket->listen('9050', 'localhost');
$factory = new Socks\Factory($loop, $dns);
$server = $factory->createServer($socket);
$server->setAuthArray(array('tom' => 'god', 'user' => 'p@ssw0rd'));
echo 'SOCKS server listening on localhost:9050' . PHP_EOL;
$loop->run();
Example #20
0
 private function createLoop()
 {
     return React\EventLoop\Factory::create();
 }