wyrihaximus / broadcast
✨ 在composer安装/更新时静态编译(异步)事件分发器
Requires
- php: ^8.2
- composer-plugin-api: ^2
- illuminate/collections: ^10
- psr/event-dispatcher: ^1
- psr/log: ^1.1 || ^2 || ^3
- react/async: ^4.1
- react/promise: ^3
- roave/better-reflection: ^6.14
- thecodingmachine/safe: ^2.5
- wyrihaximus/broadcast-contracts: ^1.3
- wyrihaximus/constants: ^1.6
- wyrihaximus/get-in-packages-composer.jason: ^2
- wyrihaximus/iterator-or-array-to-array: ^1.2
- wyrihaximus/list-classes-in-directory: ^1.6
- wyrihaximus/string-get-in: ^1.0
Requires (Dev)
- pimple/pimple: ^3.5
- psr/container: ^1
- react/promise-timer: ^1.10
- the-orville/exceptions: dev-master
- wyrihaximus/async-test-utilities: ^7.2
This package is auto-updated.
Last update: 2024-08-31 17:02:42 UTC
README
✨ 在composer安装/更新时静态编译事件分发器
安装
要通过Composer安装,请使用以下命令,它将自动检测最新版本并将其绑定到^
。
composer require wyrihaximus/broadcast
用法
任何在其composer.json
中设置以下内容的包,都会对其自动加载目录和文件进行扫描,查找实现了WyriHaximus\Broadcast\Contracts\Listener
的任何类。每个在实现WyriHaximus\Broadcast\Contracts\Listener
的类上有具体对象类型提示的公共方法,都将注册为该对象的类型提示的事件监听器。
{ "extra": { "wyrihaximus": { "broadcast": { "has-listeners": true } } } }
要使用这些自动收集的事件监听器,请使用WyriHaximus\Broadcast\ContainerListenerProvider
,它需要一个PSR-11
容器来工作。
以下示例使用了该包中附带的一个示例事件和监听器
use WyriHaximus\Broadcast\ContainerListenerProvider; use WyriHaximus\Broadcast\Dispatcher; use WyriHaximus\Broadcast\Dummy\Event; $event = new Event(); (new Dispatcher(new ContainerListenerProvider($container), $logger))->dispatch($event)
监听器
以下监听器来自我的一个应用程序,它监听初始化和关闭事件。逻辑已被移除,但保留了日志以演示简单的监听器示例。
<?php declare(strict_types=1); namespace WyriHaximus\Apps\WyriHaximusNet\GitHub\Ingest; use Mammatus\LifeCycleEvents\Initialize; use Mammatus\LifeCycleEvents\Shutdown; use Psr\Log\LoggerInterface; use WyriHaximus\Broadcast\Contracts\DoNotHandle; use WyriHaximus\Broadcast\Contracts\Listener; final class Consumer implements Listener { private LoggerInterface $logger; public function __construct(ConsumerContract $consumer, Producer $producer, LoggerInterface $logger) { $this->logger = $logger; } public function start(Initialize $event): void { $this->logger->debug('Starting to consume ingested GitHub WebHook events'); } public function handle(GenericEvent|StandardEvent $even): void { // This handler handles both the GenericEvent and StandardEvent events. } public function stop(Shutdown $event): void { $this->logger->debug('Stopping to consume ingested GitHub WebHook events'); } #[DoNotHandle] public function doNotHandle(Event $event): void { // Even through this method accepts a single object we mark not to handle it with the DoNotHandle attribute. } }
异步 & 等待
除了同步PHP事件分发之外,此包还通过ReactPHP
的异步包支持异步和等待。
要将类的监听器标记为在纤维中运行,并使分发器等待每个监听器完成后再继续,请使用WyriHaximus\Broadcast\Contracts\AsyncListener
标记接口而不是Listener
。
许可证
MIT许可证(MIT)
版权所有 © 2023 Cees-Jan Kiewiet
特此授予任何人免费获得此软件及其相关文档副本(“软件”)的权利,在不受限制的情况下处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件的副本,并允许向提供软件的人员这样做,前提是遵守以下条件
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、适用于特定目的和无侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论该索赔、损害或其他责任是基于合同、侵权或其他方式产生,源于、因或与软件或其使用或其他交易有关。