middleWares[] = $call; return $this; } /** * @param array $array * @return $this */ public function setMiddleWares(array $array) { $this->middleWares = $array; return $this; } /** * @param Node $node * @return mixed * @throws Exception */ public function getGenerate($node) { $last = function ($passable) use ($node) { $responseData = Dispatch::create($node->handler, $passable)->dispatch(); Coroutine::defer(function () use ($node, $responseData) { if ($node->hasAfter()) { $node->afterDispatch($responseData); } }); response()->send($responseData, 200); }; return $node->callback = Reduce::reduce($last, $this->annotation($node)); } /** * @param Node $node * @return array */ protected function annotation($node) { $middleWares = $this->middleWares; $this->middleWares = []; if (!$node->hasInterceptor()) { return $this->annotation_limit($node, $middleWares); } foreach ($node->getInterceptor() as $item) { $middleWares[] = $item; } return $this->annotation_limit($node, $middleWares); } /** * @param Node $node * @param $middleWares * @return array */ protected function annotation_limit($node, $middleWares) { if (!$node->hasLimits()) { return $middleWares; } foreach ($node->getLimits() as $item) { $middleWares[] = $item; } return $middleWares; } }