. namespace hoplite\http2; require_once HOPLITE_ROOT . '/http2/pipeline.php'; require_once HOPLITE_ROOT . '/http2/request.php'; require_once HOPLITE_ROOT . '/http2/response.php'; abstract class Middleware { protected $next; public function __construct(Middleware $next) { $this->next = $next; } public abstract /*http\Response*/ function execute(Request $request); } class Sentinel extends Middleware { private $response; public function __construct(Response $response) { $this->response = $response; } public function execute(Request $request) { return $this->response; } } class ClosureMiddleware extends Middleware { private $closure; public function __construct(Middleware $next, \Closure $closure) { parent::__construct($next); $this->closure = $closure; } public function execute(Request $request) { $closure = $this->closure; return $closure($request, $this->next); } }