/**
  * Process for listen message
  *
  * @param mixed $message
  *
  * @return bool
  *
  * @throws JsonParseException
  * @throws MissingMessagePropertyException
  * @throws UndefinedClassForReceiveException
  */
 protected function doListen($message)
 {
     // Try decode message (JSON)
     $message = @json_decode($message, true);
     if (null === $message || false === $message) {
         // Decode fail
         throw JsonParseException::create(json_last_error());
     }
     if (empty($message['name'])) {
         // Missing requires parameter
         throw new MissingMessagePropertyException('Missing requires parameter "name" in message.');
     }
     if (!isset($message['data'])) {
         // Missing requires parameter
         throw new MissingMessagePropertyException('Missing requires parameter "data" in message.');
     }
     $eventName = $message['name'];
     // Try get class for event
     $class = $this->listens->getClassNameForEvent($eventName);
     if (!$class) {
         throw new UndefinedClassForReceiveException(sprintf('Undefined class for receive notification by name "%s".', $eventName));
     }
     // Try recreate object from class
     $object = $this->objectRecreator->recreate($class, $message['data']);
     return $this->processor->process($eventName, $object);
 }
 /**
  * Process API method
  *
  * @param SfRequest $request
  *
  * @return JsonResponse
  *
  * @throws \Exception
  */
 private function processApiMethod(SfRequest $request)
 {
     // Try parse JSON
     $content = $request->getContent();
     if (!$content) {
         throw new MissingHttpContentException('Missing HTTP content.');
     }
     $query = @json_decode($content, true);
     if (false === $query) {
         throw JsonParseException::create(json_last_error());
     }
     return $this->processApiQuery($query);
 }