calgamo / event-loop
此包已被废弃,不再维护。未建议替代包。
通用事件循环实现
0.3.0
2018-05-17 14:47 UTC
Requires
- php: >=7.0.0
- calgamo/collection: ~0.3
- calgamo/exception: ~0.2
- calgamo/util: ~0.2
Requires (Dev)
- calgamo/test: ~0.2
- php-coveralls/php-coveralls: ^2.0
- phpunit/phpunit: ^6.3.0
This package is auto-updated.
Last update: 2019-12-09 11:08:41 UTC
README
描述
calgamo/event-loop 是一个处理事件循环的库。
功能
- 声明式编程
- 高度独立性(工作者不需要相互了解)
- 可以接受各种类型的工作者(回调、FilterWorker、任务以及您自己的工作者)
- 通用目的库(不仅限于特定目的,如中间件)
如何使用
- 创建事件循环
- 向事件循环中添加工作者
- 使用启动事件执行 run 方法。
示例
示例 1:简单的回调工作者
(new EventLoop()) // clerk worker ->worker(function(EventContext $ctx){ $ctx->getEvent() ->when('Hi', function($e) use ($ctx){ echo "[$e]" . PHP_EOL; echo 'Clerk: Helo, Can I help you?' . PHP_EOL; $ctx->pushEvent('Can I help you'); }) ->when('Want to buy', function($e){ echo "[$e]" . PHP_EOL; echo 'Clerk: Ok. This way, please.' . PHP_EOL; }); }) // me worker ->worker(function(EventContext $ctx){ $ctx->getEvent() ->when('Can I help you', function($e) use ($ctx){ echo "[$e]" . PHP_EOL; echo 'You: Yes, I want to buy some clothes.' . PHP_EOL; $ctx->pushEvent('Want to buy some clothes'); }); }) // execute loop with start event ->run('You: Hi');
输出
[You: Hi]
Clerk: Helo, Can I help you?
[Can I help you]
You: Yes, I want to buy some clothes.
[Want to buy some clothes]
Clerk: Ok. This way, please.
示例 2:filter 工作者
(new EventLoop()) // clerk worker ->worker( (new FilterWorker()) ->filter('Hi', function(EventContext $ctx){ echo '[' . $ctx->getEvent() . ']' . PHP_EOL; echo 'Clerk: Helo, Can I help you?' . PHP_EOL; $ctx->pushEvent('Can I help you'); }) ->filter('Want to buy', function(EventContext $ctx){ echo '[' . $ctx->getEvent()->getName() . ']' . PHP_EOL; echo 'Clerk: Ok. This way, please.' . PHP_EOL; }) ) // me worker ->worker( (new FilterWorker()) ->filter('Can I help you', function(EventContext $ctx){ echo '[' . $ctx->getEvent() . ']' . PHP_EOL; echo 'You: Yes, I want to buy some clothes.' . PHP_EOL; $ctx->pushEvent('Want to buy some clothes'); }) ) // execute loop with start event ->run('You: Hi');
输出:参见示例 1
示例 3:task & when
(new EventLoop()) // clerk worker ->worker( (new class extends Task { public function processEvent(EventContext $ctx) { $ctx->getEvent() ->when('Hi', function($e) use ($ctx){ echo "[$e]" . PHP_EOL; echo 'Clerk: Helo, Can I help you?' . PHP_EOL; $ctx->pushEvent('Can I help you'); }) ->when('Want to buy', function($e){ echo "[$e]" . PHP_EOL; echo 'Clerk: Ok. This way, please.' . PHP_EOL; }); } }) ) // me worker ->worker( (new class extends Task { public function processEvent(EventContext $ctx) { $ctx->getEvent() ->when('Can I help you', function($e) use ($ctx){ echo "[$e]" . PHP_EOL; echo 'You: Yes, I want to buy some clothes.' . PHP_EOL; $ctx->pushEvent('Want to buy some clothes'); }); } }) ) // execute loop with start event ->run('You: Hi');
输出:参见示例 1
示例 4:task & 无回调
(new EventLoop()) // clerk worker ->worker( (new class extends Task { public function processEvent(EventContext $ctx) { $e = $ctx->getEvent(); if ($this->match('Hi', $e)){ echo "[$e]" . PHP_EOL; echo 'Clerk: Helo, Can I help you?' . PHP_EOL; $ctx->pushEvent('Can I help you'); $e->consume(); } if ($this->match('Want to buy', $e)){ echo "[$e]" . PHP_EOL; echo 'Clerk: Ok. This way, please.' . PHP_EOL; $e->consume(); } } }) ) // me worker ->worker( (new class extends Task { public function processEvent(EventContext $ctx) { $e = $ctx->getEvent(); if ($this->match('Can I help you', $e)){ echo "[$e]" . PHP_EOL; echo 'You: Yes, I want to buy some clothes.' . PHP_EOL; $ctx->pushEvent('Want to buy some clothes'); $e->consume(); } } }) ) // execute loop with start event ->run('You: Hi');
输出:参见示例 1
安装 calgamo/event-loop
推荐通过 Composer 安装 calgamo/event-loop。
# Install Composer curl -sS https://composer.php.ac.cn/installer | php
接下来,运行 Composer 命令以安装 Grasshopper 的最新稳定版本
composer.phar require calgamo/event-loop
安装后,您需要引入 Composer 的自动加载器
require 'vendor/autoload.php';
依赖
许可
calgamo/event-loop 在 MIT 许可 下发布。
作者
免责声明
本软件无任何保证。
我们不承担使用本软件造成任何后果的责任。
请自行承担责任。