public function getTaskResultFromMessage(OutputMessage $message) { $data = $message->getData(); $type = substr($data, 0, 1); $serializedData = substr($data, 1); if ($type === 'r') { $return = unserialize($serializedData); $taskResult = TaskResult::fromReturn($return); } elseif ($type === 'e') { list($class, $message, $code, $file, $line, ) = unserialize($serializedData); $exception = $this->createResultException($class); $this->setResultExceptionInternalData($exception, $class, $message, $code, $file, $line); $taskResult = TaskResult::fromException($exception); } else { $taskResult = TaskResult::fromReturn(null); } return $taskResult; }
/** * @param string $type * @param InputMessageIdentifier $identifier * @param OutputMessage $outputMessage */ public function putOutput($type, InputMessageIdentifier $identifier, OutputMessage $outputMessage) { $messageId = $identifier->getId(); $captureResult = 'MessageNotFinished' === $this->redis->hGet($this->getMessageResultKey($type), $messageId); $this->redis->multi(); $this->redis->lRem($this->getMessageRunKey($type), $messageId, 0); $this->redis->hDel($this->getMessageStartTimeKey($type), $messageId); $this->redis->lRem($this->getMessageQueueKey($type), $messageId, 0); $this->redis->hDel($this->getMessageQueueTimeKey($type), $messageId); $this->redis->hDel($this->getMessageKey($type), $messageId); if ($captureResult) { $data = $outputMessage->getData(); $this->redis->hSet($this->getMessageResultKey($type), $messageId, $data); $this->redis->lPush($this->getMessageResultReadyKey($type, $messageId), 'true'); } $this->redis->exec(); }