1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- <?php
- /*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- namespace Symfony\Component\Messenger\Handler;
- use Symfony\Component\Messenger\Exception\LogicException;
- /**
- * @author Nicolas Grekas <p@tchwork.com>
- */
- class Acknowledger
- {
- private $handlerClass;
- private $ack;
- private $error = null;
- private $result = null;
- /**
- * @param null|\Closure(\Throwable|null, mixed):void $ack
- */
- public function __construct(string $handlerClass, \Closure $ack = null)
- {
- $this->handlerClass = $handlerClass;
- $this->ack = $ack ?? static function () {};
- }
- /**
- * @param mixed $result
- */
- public function ack($result = null): void
- {
- $this->doAck(null, $result);
- }
- public function nack(\Throwable $error): void
- {
- $this->doAck($error);
- }
- public function getError(): ?\Throwable
- {
- return $this->error;
- }
- /**
- * @return mixed
- */
- public function getResult()
- {
- return $this->result;
- }
- public function isAcknowledged(): bool
- {
- return null === $this->ack;
- }
- public function __destruct()
- {
- if ($this->ack instanceof \Closure) {
- throw new LogicException(sprintf('The acknowledger was not called by the "%s" batch handler.', $this->handlerClass));
- }
- }
- private function doAck(\Throwable $e = null, $result = null): void
- {
- if (!$ack = $this->ack) {
- throw new LogicException(sprintf('The acknowledger cannot be called twice by the "%s" batch handler.', $this->handlerClass));
- }
- $this->ack = null;
- $this->error = $e;
- $this->result = $result;
- $ack($e, $result);
- }
- }
|