public function process(HttpRequest $request, $requestType = self::MASTER_REQUEST)
	{
		$filter = function($result) {
			return $result instanceof HttpResponse;
		};
		
		try
		{
			$this->dispatcher->notify(new PrepareRequestEvent($request, $requestType, $this));
			$response = $this->dispatcher->publishUntil(new FilterRequestEvent($request, $requestType, $this), $filter);
			
			if(!$response instanceof HttpResponse)
			{
				$response = $this->createNotFoundResponse($request);
			}
			
			$event = new FilterResponseEvent($request, $requestType, $response, $this);
			$this->dispatcher->notify($event);
			
			$response = $event->response;
		}
		catch(\Exception $e)
		{
			if($this->handleExceptions)
			{
				$response = $this->dispatcher->publishUntil(new HandleExceptionEvent($request, $requestType, $e, $this), $filter);
			
				if(!$response instanceof HttpResponse)
				{
					throw $e;
				}
			}
			else
			{
				throw $e;
			}
		}
		
		$response->setProtocol($request->getProtocol());

		return $response;
	}
public function process(HttpRequest $request, $requestType = self::MASTER_REQUEST)
	{
		$filter = function($result) {
			return $result instanceof HttpResponse;
		};
		
		try
		{
			$this->dispatcher->notify(new PrepareRequestEvent($request, $requestType, $this));
			$response = $this->dispatcher->publishUntil(new FilterRequestEvent($request, $requestType, $this), $filter);
			
			if(!$response instanceof HttpResponse)
			{
				$response = $this->createNotFoundResponse($request);
			}
			
			$event = new FilterResponseEvent($request, $requestType, $response, $this);
			$this->dispatcher->notify($event);
			
			$response = $event->response;
		}
		catch(\Exception $e)
		{
			if($this->handleExceptions)
			{
				$response = $this->dispatcher->publishUntil(new HandleExceptionEvent($request, $requestType, $e, $this), $filter);
			
				if(!$response instanceof HttpResponse)
				{
					throw $e;
				}
			}
			else
			{
				throw $e;
			}
		}
		
		$response->setProtocol($request->getProtocol());

		return $response;
	}
{@inheritDoc}