diff --git a/Dispatcher/GearmanCallbacksDispatcher.php b/Dispatcher/GearmanCallbacksDispatcher.php index 71ae4af..1893436 100644 --- a/Dispatcher/GearmanCallbacksDispatcher.php +++ b/Dispatcher/GearmanCallbacksDispatcher.php @@ -25,6 +25,7 @@ use Mmoreram\GearmanBundle\Event\GearmanClientCallbackWarningEvent; use Mmoreram\GearmanBundle\Event\GearmanClientCallbackWorkloadEvent; use Mmoreram\GearmanBundle\GearmanEvents; +use Symfony\Component\EventDispatcher\LegacyEventDispatcherProxy; /** * Gearman callbacks @@ -96,9 +97,9 @@ public function assignCompleteCallback(GearmanTask $gearmanTask, $contextReferen if (!is_null($contextReference)) { $event->setContext($contextReference); } - $this->eventDispatcher->dispatch( - GearmanEvents::GEARMAN_CLIENT_CALLBACK_COMPLETE, - $event + $this->dispatch( + $event, + GearmanEvents::GEARMAN_CLIENT_CALLBACK_COMPLETE ); } @@ -112,9 +113,9 @@ public function assignCompleteCallback(GearmanTask $gearmanTask, $contextReferen public function assignFailCallback(GearmanTask $gearmanTask) { $event = new GearmanClientCallbackFailEvent($gearmanTask); - $this->eventDispatcher->dispatch( - GearmanEvents::GEARMAN_CLIENT_CALLBACK_FAIL, - $event + $this->dispatch( + $event, + GearmanEvents::GEARMAN_CLIENT_CALLBACK_FAIL ); } @@ -128,9 +129,9 @@ public function assignFailCallback(GearmanTask $gearmanTask) public function assignDataCallback(GearmanTask $gearmanTask) { $event = new GearmanClientCallbackDataEvent($gearmanTask); - $this->eventDispatcher->dispatch( - GearmanEvents::GEARMAN_CLIENT_CALLBACK_DATA, - $event + $this->dispatch( + $event, + GearmanEvents::GEARMAN_CLIENT_CALLBACK_DATA ); } @@ -144,9 +145,9 @@ public function assignDataCallback(GearmanTask $gearmanTask) public function assignCreatedCallback(GearmanTask $gearmanTask) { $event = new GearmanClientCallbackCreatedEvent($gearmanTask); - $this->eventDispatcher->dispatch( - GearmanEvents::GEARMAN_CLIENT_CALLBACK_CREATED, - $event + $this->dispatch( + $event, + GearmanEvents::GEARMAN_CLIENT_CALLBACK_CREATED ); } @@ -158,9 +159,9 @@ public function assignCreatedCallback(GearmanTask $gearmanTask) public function assignExceptionCallback(GearmanTask $gearmanTask) { $event = new GearmanClientCallbackExceptionEvent($gearmanTask); - $this->eventDispatcher->dispatch( - GearmanEvents::GEARMAN_CLIENT_CALLBACK_EXCEPTION, - $event + $this->dispatch( + $event, + GearmanEvents::GEARMAN_CLIENT_CALLBACK_EXCEPTION ); } @@ -174,9 +175,9 @@ public function assignExceptionCallback(GearmanTask $gearmanTask) public function assignStatusCallback(GearmanTask $gearmanTask) { $event = new GearmanClientCallbackStatusEvent($gearmanTask); - $this->eventDispatcher->dispatch( - GearmanEvents::GEARMAN_CLIENT_CALLBACK_STATUS, - $event + $this->dispatch( + $event, + GearmanEvents::GEARMAN_CLIENT_CALLBACK_STATUS ); } @@ -190,9 +191,9 @@ public function assignStatusCallback(GearmanTask $gearmanTask) public function assignWarningCallback(GearmanTask $gearmanTask) { $event = new GearmanClientCallbackWarningEvent($gearmanTask); - $this->eventDispatcher->dispatch( - GearmanEvents::GEARMAN_CLIENT_CALLBACK_WARNING, - $event + $this->dispatch( + $event, + GearmanEvents::GEARMAN_CLIENT_CALLBACK_WARNING ); } @@ -206,9 +207,21 @@ public function assignWarningCallback(GearmanTask $gearmanTask) public function assignWorkloadCallback(GearmanTask $gearmanTask) { $event = new GearmanClientCallbackWorkloadEvent($gearmanTask); - $this->eventDispatcher->dispatch( - GearmanEvents::GEARMAN_CLIENT_CALLBACK_WORKLOAD, - $event + $this->dispatch( + $event, + GearmanEvents::GEARMAN_CLIENT_CALLBACK_WORKLOAD ); } + + private function dispatch($event, $eventName) + { + // LegacyEventDispatcherProxy exists in Symfony >= 4.3 + if (class_exists(LegacyEventDispatcherProxy::class)) { + // New Symfony 4.3 EventDispatcher signature + $this->eventDispatcher->dispatch($event, $eventName); + } else { + // Old EventDispatcher signature + $this->eventDispatcher->dispatch($eventName, $event); + } + } } diff --git a/Event/Abstracts/AbstractGearmanClientTaskEvent.php b/Event/Abstracts/AbstractGearmanClientTaskEvent.php index c17c66c..39bf67d 100644 --- a/Event/Abstracts/AbstractGearmanClientTaskEvent.php +++ b/Event/Abstracts/AbstractGearmanClientTaskEvent.php @@ -14,7 +14,6 @@ namespace Mmoreram\GearmanBundle\Event\Abstracts; use GearmanTask; -use Symfony\Component\EventDispatcher\Event; /** * AbstractGearmanClientTaskEvent diff --git a/Event/Abstracts/Event.php b/Event/Abstracts/Event.php new file mode 100644 index 0000000..641c67c --- /dev/null +++ b/Event/Abstracts/Event.php @@ -0,0 +1,34 @@ + + */ + +namespace Mmoreram\GearmanBundle\Event\Abstracts; + +use Symfony\Component\EventDispatcher\Event as BaseEventDeprecated; +use Symfony\Contracts\EventDispatcher\Event as BaseEvent; + +// Symfony 4.3 BC layer +if (class_exists(BaseEvent::class)) { + /** + * @internal + */ + abstract class Event extends BaseEvent + { + } +} else { + /** + * @internal + */ + abstract class Event extends BaseEventDeprecated + { + } +} diff --git a/Event/GearmanWorkExecutedEvent.php b/Event/GearmanWorkExecutedEvent.php index eea48dd..f94d33b 100644 --- a/Event/GearmanWorkExecutedEvent.php +++ b/Event/GearmanWorkExecutedEvent.php @@ -13,7 +13,7 @@ namespace Mmoreram\GearmanBundle\Event; -use Symfony\Component\EventDispatcher\Event; +use Mmoreram\GearmanBundle\Event\Abstracts\Event; /** * GearmanWorkExecutedEvent diff --git a/Event/GearmanWorkStartingEvent.php b/Event/GearmanWorkStartingEvent.php index 6af5005..a1c2bcd 100644 --- a/Event/GearmanWorkStartingEvent.php +++ b/Event/GearmanWorkStartingEvent.php @@ -13,7 +13,7 @@ namespace Mmoreram\GearmanBundle\Event; -use Symfony\Component\EventDispatcher\Event; +use Mmoreram\GearmanBundle\Event\Abstracts\Event; /** * GearmanWorkStartingEvent diff --git a/Service/GearmanExecute.php b/Service/GearmanExecute.php index f87157a..be38f05 100644 --- a/Service/GearmanExecute.php +++ b/Service/GearmanExecute.php @@ -18,7 +18,7 @@ use Symfony\Component\DependencyInjection\ContainerAwareInterface; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\EventDispatcher\EventDispatcherInterface; - +use Symfony\Component\EventDispatcher\LegacyEventDispatcherProxy; use Mmoreram\GearmanBundle\Command\Util\GearmanOutputAwareInterface; use Mmoreram\GearmanBundle\Event\GearmanWorkExecutedEvent; use Mmoreram\GearmanBundle\Event\GearmanWorkStartingEvent; @@ -140,7 +140,7 @@ public function setContainer(ContainerInterface $container) */ public function setEventDispatcher(EventDispatcherInterface $eventDispatcher) { - $this->eventDispatcher = $eventDispatcher; + $this->eventDispatcher = class_exists(LegacyEventDispatcherProxy::class) ? LegacyEventDispatcherProxy::decorate($eventDispatcher) : $eventDispatcher; return $this; } @@ -341,7 +341,7 @@ private function runJob(\GearmanWorker $gearmanWorker, $objInstance, array $jobs $iterations--; $event = new GearmanWorkExecutedEvent($jobs, $iterations, $gearmanWorker->returnCode()); - $this->eventDispatcher->dispatch(GearmanEvents::GEARMAN_WORK_EXECUTED, $event); + $this->dispatch($event, GearmanEvents::GEARMAN_WORK_EXECUTED); if ($gearmanWorker->returnCode() != GEARMAN_SUCCESS) { @@ -434,7 +434,7 @@ public function handleJob(\GearmanJob $job) } $event = new GearmanWorkStartingEvent($context['jobs']); - $this->eventDispatcher->dispatch(GearmanEvents::GEARMAN_WORK_STARTING, $event); + $this->dispatch($event, GearmanEvents::GEARMAN_WORK_STARTING); $result = call_user_func_array( array($context['job_object_instance'], $context['job_method']), @@ -450,4 +450,16 @@ public function handleJob(\GearmanJob $job) return $result; } + + private function dispatch($event, $eventName) + { + // LegacyEventDispatcherProxy exists in Symfony >= 4.3 + if (class_exists(LegacyEventDispatcherProxy::class)) { + // New Symfony 4.3 EventDispatcher signature + $this->eventDispatcher->dispatch($event, $eventName); + } else { + // Old EventDispatcher signature + $this->eventDispatcher->dispatch($eventName, $event); + } + } }