/**
  * {@inheritdoc}
  */
 public function waitAndReserve($timeout = null)
 {
     if ($timeout === null) {
         $timeout = $this->options['timeout'];
     }
     $pheanstalkJob = $this->client->reserveFromTube($this->name, $timeout);
     if ($pheanstalkJob === null || $pheanstalkJob === false) {
         return null;
     }
     $message = $this->decodeMessage($pheanstalkJob->getData());
     $message->setIdentifier($pheanstalkJob->getId());
     $message->setState(Message::STATE_RESERVED);
     return $message;
 }