public function run($callback = null)
    {
        // Check before routing middle ware and trigger
        $this->beforeRoutingMiddleware();
        // Set after routing event
        $this->setAfterRoutingMiddleWare();
        // Handle all routes
        $handledRequest = 0;
        if (isset($this->routes[$this->request->server->get('REQUEST_METHOD')])) {
            $flag = (!is_null($this->afterRouter)) ? true : false;

            $handledRequest = $this->handle($this->routes[$this->request->server->get('REQUEST_METHOD')], $flag);
        }

        // If no route was handled, trigger the 404 (if any)
        if ($handledRequest == 0) {
            if (!is_null($this->notFound) && is_callable($this->notFound)) {
                return call_user_func($this->notFound);
            }
        }
    }