Files
kiri-core/System/Events/EventDispatch.php
T

38 lines
655 B
PHP
Raw Normal View History

2021-08-02 16:38:50 +08:00
<?php
namespace Snowflake\Events;
2021-08-03 18:18:09 +08:00
use Annotation\Inject;
use Snowflake\Abstracts\BaseObject;
/**
*
*/
class EventDispatch extends BaseObject
2021-08-02 16:38:50 +08:00
{
2021-08-03 18:18:09 +08:00
#[Inject(EventProvider::class)]
public EventProvider $eventProvider;
2021-08-02 16:38:50 +08:00
/**
2021-08-03 18:18:09 +08:00
* @param object $triggerEvent
* @return object
2021-08-02 16:38:50 +08:00
*/
2021-08-03 18:18:09 +08:00
public function dispatch(object $triggerEvent): object
2021-08-02 16:38:50 +08:00
{
2021-08-03 18:18:09 +08:00
$lists = $this->eventProvider->getListenersForEvent($triggerEvent);
foreach ($lists as $listener) {
/** @var Struct $list */
$listener($triggerEvent);
if ($triggerEvent instanceof StoppableEventInterface && $triggerEvent->isPropagationStopped()) {
2021-08-02 16:38:50 +08:00
break;
}
}
2021-08-03 18:18:09 +08:00
return $triggerEvent;
2021-08-02 16:38:50 +08:00
}
2021-08-03 18:18:09 +08:00
2021-08-02 16:38:50 +08:00
}