protected function clientFetch(Client $client, FetchRequest $msg)
    {
        $requestId     = $msg->getRequestId();
        $waitForResult = $msg->getWaitForResult();

        $client->setRequest($requestId, $waitForResult);

        $this->getLogger()->debug(
            sprintf(
                'Client %s is requesting the result of request %s.',
                bin2hex($client->getId()),
                $requestId
            )
        );

        if ($this->storage->has($requestId)) {
            $this->sendResponseToClients($requestId);

            return;
        }

        $this->logger->debug(
            sprintf(
                'The result for request %s is not yet available, but '.
                'client %s is %s to wait for it.',
                $requestId,
                bin2hex($client->getId()),
                ($waitForResult) ? 'willing' : 'not willing'
            )
        );

        if (!$waitForResult) {
            $this->reply($client, new TimeoutResponse($requestId));;
        }
    }