protected function dispatch()
    {
        $routeInfo = $this->dispatcher->dispatch($_SERVER['REQUEST_METHOD'], $this->currentURL);

        switch ($routeInfo[0]) {
            case Dispatcher::NOT_FOUND:
                   // Continue to WordPress

                break;
            case Dispatcher::METHOD_NOT_ALLOWED:
                $allowedMethods = $routeInfo[1];
                // Sample : ... 405 Method Not Allowed
                break;
            case Dispatcher::FOUND:

                if ($this->app->get('whoops') !== null) {
                    $this->app->get('whoops')->init();
                }

                // Hook WordPress Template
                $this->view->hook();

                // Get route parameter
                $routeHandler = $routeInfo[1];
                $vars = $routeInfo[2];

                // Protected route, check the token
                if (in_array($this->request->getMethod(), $this->protectedRoute) || $this->request->isXmlHttpRequest()) {
                    $this->request->checkToken();
                }

                // Check if route is deffered
                if (!$routeHandler->isDeferred()) {
                    $this->sendResponse($routeHandler, $vars);

                    return;
                }

                // Share routeHandler and vars to App
                $this->app->share('routeHandler', $routeHandler);
                $this->app->share('routeHandlerVars', $vars);

                // Defered route callback
                add_action($routeHandler->getRunLevel(), function () {

                    $routeHandler = $this->app->get('routeHandler');
                    $vars = $this->app->get('routeHandlerVars');

                    $this->sendResponse($routeHandler, $vars);

                }, $routeHandler->getPriority());

                break;
        }
    }