<?php

require dirname(__DIR__) . '/vendor/autoload.php';
use Zend\Diactoros;
use ExpressiveAsync\Server;
use React\EventLoop\Factory;
use React\Socket\Server as SocketServer;
use ExpressiveAsync\Application;
use React\Promise\Deferred;
$serviceManager = new \Zend\ServiceManager\ServiceManager();
$eventLoop = Factory::create();
$socketServer = new SocketServer($eventLoop);
$httpServer = new Server($socketServer);
$serviceManager->setFactory('EventLoop', function () use($eventLoop) {
    return $eventLoop;
});
$serviceManager->setInvokableClass('Zend\\Expressive\\Router\\RouterInterface', 'Zend\\Expressive\\Router\\FastRouteRouter');
$router = new \Zend\Expressive\Router\FastRouteRouter();
$router->addRoute(new \Zend\Expressive\Router\Route('/', function ($request, $response) use($eventLoop) {
    echo 'Home executed' . PHP_EOL;
    return new Diactoros\Response\HtmlResponse('Hello World.');
}, ['GET'], 'home'));
$router->addRoute(new \Zend\Expressive\Router\Route('/deferred', function ($request, $response) use($eventLoop) {
    // create a request, wait 1-5 seconds and then return a response.
    $deferred = new Deferred();
    $eventLoop->addTimer(rand(1, 5), function () use($deferred) {
        echo 'Timer executed' . PHP_EOL;
        $deferred->resolve(new Diactoros\Response\HtmlResponse('Deferred response.'));
    });
    return new \ExpressiveAsync\DeferredResponse($deferred->promise());
}, ['GET'], 'deferred'));
Exemple #2
0
 /**
  * Boot Rails.
  *
  * It requires at least paths to libraries and/or Composer Autoloader
  * to autoload classes. An instance of Rails\Loader\Loader can also be
  * passed instead.
  *
  * @param array $config
  */
 public static function boot(array $config)
 {
     if (self::$booted) {
         return;
     }
     /**
      * Loader.
      */
     if (!isset($config['loader'])) {
         throw new BadMethodCallException('Requires at least loader instance or configuration');
     } else {
         if (is_array($config['loader'])) {
             // require_once __DIR__ . '/Rails/Loader/Loader.php';
             $loader = new Rails\Loader\Loader();
             if (isset($config['loader']['paths'])) {
                 $loader->addPaths($config['loader']['paths']);
             }
             if (isset($config['loader']['composerAutoloader'])) {
                 $loader->setComposerAutoloader($config['loader']['composerAutoloader']);
             } else {
                 $loader->addPath(__DIR__ . '/Rails');
             }
             $loader->register();
         } elseif ($config['loader'] instanceof Rails\Loader\Loader) {
             $loader = $config['loader'];
         } else {
             throw new InvalidArgumentException(sprintf('Loader must be either array or instance of Rails\\Loader\\Loader, %s passed', gettype($config['loader'])));
         }
     }
     /**
      * Service Manager.
      */
     $sm = new Zend\ServiceManager\ServiceManager();
     self::$serviceManager = $sm;
     $sm->setService('loader', $loader);
     /**
      * Global configuration.
      */
     $sm->setService('rails.config', new Rails\ActiveSupport\ArrayObject(['use_cache' => false]));
     /**
      * Inflector.
      */
     $sm->setFactory('inflector', function () {
         return new Rails\ActiveSupport\Inflector\Inflector(new Rails\ActiveSupport\Inflector\Inflections\EnglishInflections(), 'en');
     });
     /**
      * Translator.
      */
     $sm->setFactory('i18n', function () {
         $tr = new Rails\I18n\LoadingTranslator();
         $tr->setDefaultLocale('en');
         $tr->setLoader(new Rails\I18n\Loader());
         # Add Rails' locales paths to i18n loader
         $tr->loader()->addPaths([__DIR__ . '/Rails/ActiveSupport/Carbon/locales', __DIR__ . '/Rails/I18n/locales']);
         return $tr;
     });
     self::$booted = true;
 }