Skip to content

Instantly share code, notes, and snippets.

@Crell
Created August 11, 2015 01:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Crell/812ffb9dc8f5e7c29266 to your computer and use it in GitHub Desktop.
Save Crell/812ffb9dc8f5e7c29266 to your computer and use it in GitHub Desktop.
<?php
namespace Crell\IcicleTest;
use Icicle\Http\Message\RequestInterface;
use Icicle\Http\Message\Response;
class Router
{
public function mapToAction(RequestInterface $request)
{
$path = $request->getUri()->getPath();
switch ($path) {
case '/hello':
$callable = function (RequestInterface $request) {
return 'Hello world';
};
break;
case '/goodbye':
$callable = function (RequestInterface $request) {
return 'Hello world';
};
break;
default:
$callable = function (RequestInterface $request) {
return new Response(404);
};
break;
}
return $callable;
}
}
<?php
use Icicle\Http\Message\RequestInterface;
use Icicle\Http\Message\Response;
use Icicle\Http\Server\Server;
use Icicle\Loop;
use Icicle\Socket\Client\ClientInterface;
require 'vendor/autoload.php';
$t = new \Crell\IcicleTest\Server();
$router = new \Crell\IcicleTest\Router();
$new = function (RequestInterface $request, ClientInterface $client) use ($router) {
$action = $router->mapToAction($request);
$gen = function () use ($action, $request) {
yield $action($request);
};
$p = new \Icicle\Promise\Promise(function() use ($router, $request) {
$action = $router->mapToAction($request);
return $action;
});
$p->then(function($action) use ($request) {
$result = $action($request);
return $result;
});
$callback = new \Icicle\Coroutine\Coroutine($gen());
$result = yield $callback();
/*
$result = yield (function() use ($request) {
yield $action($request);
});
*/
if ($result instanceof \Icicle\Http\Message\ResponseInterface) {
$response = $result;
}
elseif (is_string($result)) {
$response = new Response(200);
$response->getBody()->end($result);
}
else {
$response = new Response(500);
$response->getBody()->end('Well that\'s definitely wrong');
}
yield $response;
};
$server = new Server($new);
$server->listen(8080);
$server->listen(8888);
Loop\run();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment