Dispatcher.php 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <?php
  2. namespace ModulesGarden\Servers\ProxmoxVps\Core\Events;
  3. use ModulesGarden\Servers\ProxmoxVps\Core\DependencyInjection;
  4. use ModulesGarden\Servers\ProxmoxVps\Core\DependencyInjection\Container;
  5. use ModulesGarden\Servers\ProxmoxVps\Core\ModuleConstants;
  6. use ModulesGarden\Servers\ProxmoxVps\Core\Queue\DatabaseQueue;
  7. class Dispatcher extends \Illuminate\Events\Dispatcher
  8. {
  9. public function __construct(Container $container)
  10. {
  11. $this->container = $container;
  12. $this->initialize();
  13. }
  14. /**
  15. *
  16. */
  17. protected function initialize()
  18. {
  19. /**
  20. * Load available events
  21. */
  22. $path = ModuleConstants::getFullPath('app', 'Config', 'events.php');
  23. $config = include($path);
  24. foreach($config as $event => $listeners)
  25. {
  26. foreach($listeners as $listener)
  27. {
  28. $this->listen($event, $listener);
  29. }
  30. }
  31. /**
  32. * Set queue resolver
  33. */
  34. $this->setQueueResolver(function(){
  35. return DependencyInjection::create(DatabaseQueue::class);
  36. });
  37. }
  38. /**
  39. * @param $class
  40. * @param $arguments
  41. */
  42. public function queue($class, $arguments, $parentId = null, $relType = null, $relId = null, $customId = null)
  43. {
  44. $class = implode('@', $this->parseClassCallable($class));
  45. return $this->resolveQueue()->push("$class", serialize($arguments), $parentId, $relType, $relId, $customId);
  46. }
  47. /**
  48. * @param $class
  49. * @param $method
  50. * @override
  51. * @return \Closure
  52. */
  53. protected function createQueuedHandlerCallable($class, $method)
  54. {
  55. return function () use ($class, $method)
  56. {
  57. $arguments = $this->cloneArgumentsForQueueing(func_get_args());
  58. if (method_exists($class, 'queue'))
  59. {
  60. $this->callQueueMethodOnHandler($class, $method, $arguments);
  61. }
  62. else
  63. {
  64. $this->resolveQueue()->push("{$class}@{$method}", serialize($arguments));
  65. }
  66. };
  67. }
  68. }