Exemple #1
0
 /**
  * Handles termination signals, so we can gracefully stop all servers.
  */
 public function shutdown()
 {
     if ($this->inShutdown) {
         return;
     }
     $this->inShutdown = true;
     //this method is also called during startup when something crashed, so
     //make sure we don't operate on nulls.
     $this->output->writeln('<error>Termination received, exiting.</error>');
     if ($this->controller) {
         @$this->controller->shutdown();
     }
     if ($this->web) {
         @$this->web->shutdown();
     }
     if ($this->loop) {
         $this->loop->tick();
         $this->loop->stop();
     }
     foreach ($this->slaves as $slave) {
         if (is_resource($slave['process'])) {
             proc_terminate($slave['process']);
         }
         if ($slave['pid']) {
             //make sure its dead
             posix_kill($slave['pid'], SIGKILL);
         }
     }
     exit;
 }
 public function assertConnection(array $options, $message = null)
 {
     $settings = array_merge(["ip" => "0.0.0.0", "port" => 0, "startServer" => false, "match" => true], $options);
     // optionally starting server
     if ($settings["startServer"]) {
         $serverLoop = EventLoopFactory::create();
         $server = new SocketServer($serverLoop);
         $server->listen($settings["port"]);
     }
     // client setup
     $clientLoop = EventLoopFactory::create();
     $dnsResolverFactory = new DnsResolverFactory();
     $dns = $dnsResolverFactory->createCached("8.8.8.8", $clientLoop);
     // dunno why dns is required for this shit
     $connector = new SocketConnector($clientLoop, $dns);
     $promise = $connector->create($settings["ip"], $settings["port"])->then(function (SocketStream $stream) {
         $stream->close();
         return true;
     }, function (SocketConnectionException $e) {
         return false;
     });
     $clientLoop->run();
     // catching the output
     $out = null;
     $promise->done(function ($v) use(&$out) {
         $out = $v;
     });
     // optionally cleaning up the server
     if ($settings["startServer"]) {
         $server->shutdown();
     }
     $this->assertEquals($out, $settings["match"], $message);
 }
Exemple #3
0
 /**
  * Checks if the SIGTERM is presente in the server.
  */
 protected function checkSigterm()
 {
     if ($this->sigterm) {
         $this->loop->stop();
         $this->socket->shutdown();
         $this->output->writeln('The Foreman Processor has been stopped.');
     }
 }
 public function handleRouterStop(RouterStopEvent $event)
 {
     if ($this->server) {
         $this->server->shutdown();
     }
     foreach ($this->sessions as $k) {
         $this->sessions[$k]->shutdown();
     }
 }
 /**
  * @param Server        $server
  * @param LoopInterface $loop
  */
 protected function closure(Server $server, LoopInterface $loop)
 {
     $this->logger->notice('Stopping server ...');
     foreach ($this->serverPushHandlerRegistry->getPushers() as $handler) {
         $handler->close();
         $this->logger->info(sprintf('Stop %s push handler', $handler->getName()));
     }
     $server->emit('end');
     $server->shutdown();
     foreach ($this->periodicRegistry->getPeriodics() as $periodic) {
         if ($periodic instanceof TimerInterface && $loop->isTimerActive($periodic)) {
             $loop->cancelTimer($periodic);
         }
     }
     $loop->stop();
     $this->logger->notice('Server stopped !');
 }
 /** @test */
 public function connectionToTcpServerShouldSucceed()
 {
     $capturedStream = null;
     $loop = new StreamSelectLoop();
     $server = new Server($loop);
     $server->on('connection', $this->expectCallableOnce());
     $server->on('connection', function () use($server, $loop) {
         $server->shutdown();
     });
     $server->listen(9999);
     $connector = new TcpConnector($loop);
     $connector->create('127.0.0.1', 9999)->then(function ($stream) use(&$capturedStream) {
         $capturedStream = $stream;
         $stream->end();
     });
     $loop->run();
     $this->assertInstanceOf('React\\Stream\\Stream', $capturedStream);
 }
Exemple #7
0
 /**
  * Shuts down the event loop. This basically exits the process.
  */
 public function shutdown()
 {
     if ($this->inShutdown) {
         return;
     }
     $this->inShutdown = true;
     $this->sendCurrentFiles();
     $this->loop->tick();
     if ($this->connection && $this->connection->isWritable()) {
         $this->connection->close();
     }
     if ($this->server) {
         @$this->server->shutdown();
     }
     if ($this->loop) {
         $this->loop->tick();
         @$this->loop->stop();
     }
     exit;
 }
Exemple #8
0
 public function testConnect()
 {
     $loop = new StreamSelectLoop();
     $deferred = new Deferred();
     $deferred->promise()->then(function ($value) use($loop) {
         $this->assertEquals(1, $value);
         $loop->stop();
     }, function () {
         $this->fail('Promise was rejected');
     });
     $server = new Server($loop);
     $server->listen(54321, '0.0.0.0');
     $server->on('connection', function (Stream $stream) use($deferred, $server) {
         $deferred->resolve(1);
         $server->shutdown();
     });
     $request = new RequestFactory();
     $connector = new TcpConnector($loop);
     $client = new Client($connector, $request);
     $client->connect('127.0.0.1', 54321);
     $loop->run();
 }
Exemple #9
0
 /**
  * Quit the server.
  */
 public function quit()
 {
     $this->logger->info("Quitting server");
     $this->socket->shutdown();
 }
Exemple #10
0
 public function testReturnsResponse()
 {
     $loop = new StreamSelectLoop();
     $request = new RequestFactory();
     $server = new Server($loop);
     $server->on('connection', function (SocketConnection $connection) use($server, $request) {
         $connection->on('data', function ($data) use($connection, $request) {
             $req = $request->response($data);
             $response = new Response($req->getId(), ['1.0']);
             $connection->write($response->write());
         });
         $connection->on('close', function () use($server) {
             $server->shutdown();
         });
     });
     $server->listen(54323, '127.0.0.1');
     $tcp = new TcpConnector($loop);
     $client = new Client($tcp, $request);
     $client->connect('127.0.0.1', 54323)->then(function (Connection $connection) use($loop) {
         $deferred = new Deferred();
         $deferred->promise()->then(function ($value) {
             $this->assertEquals(1, $value);
         });
         $electrum = new ElectrumClient($connection);
         $electrum->getServerVersion('1.9.6', ' 0.6')->then(function () use($deferred, $connection) {
             $deferred->resolve(1);
             $connection->close();
         }, function () use($loop) {
             $loop->stop();
             $this->fail();
         });
     });
     $loop->run();
 }
Exemple #11
0
 public function stop()
 {
     $this->socketServer->shutdown();
     parent::stop();
 }
Exemple #12
0
    {
        $ui = Ui::printStatus($this->game);
        $this->connection->write($ui);
        echo $ui;
    }
}
$loop = Factory::create();
$socket = new Server($loop);
$players = [];
$socket->on('connection', function (Connection $conn) use(&$players, $socket) {
    if (count($players) < 2) {
        $players[] = new PlayerConnection($conn);
    }
    if (count($players) == 2) {
        $deferred = new Deferred();
        $deferred->promise()->then(function ($results) use(&$players, $socket) {
            foreach ($results as $result) {
                foreach ($players as $player) {
                    if ($player === $result[0]) {
                        $player->getConnection()->end('You ' . $result[1] . PHP_EOL);
                    }
                }
            }
            $socket->shutdown();
        });
        $game = new Game($players[0], $players[1]);
        $game->start($deferred);
    }
});
$socket->listen(1337, '0.0.0.0');
$loop->run();
Exemple #13
0
 /**
  * Shut down the server
  */
 public function close()
 {
     $this->server->shutdown();
 }
Exemple #14
0
 /**
  * @inheritDoc
  */
 public function onClose($reason)
 {
     $this->socket->shutdown();
     parent::onClose($reason);
 }
Exemple #15
0
 /**
  * Stop listening
  */
 public function shutdown()
 {
     $this->io->shutdown();
     $this->observable->notifyCompleted();
 }