react-command-bus/README.md

48 lines
1.7 KiB
Markdown
Raw Normal View History

2024-03-01 13:34:14 +00:00
# Command Bus for ReactPHP
2024-03-01 13:59:12 +00:00
## Features
* Can run monolithic (create a bus and use as is), or distributed (create bus and use clients), or in a hybrid setup. The CommandBus functions identical with or without clients.
2024-03-01 13:34:14 +00:00
* All commands called asynchronously using promises and deferreds.
2024-03-01 13:59:12 +00:00
* Push notifications from the bus to subscribers and listeners, such as progress or log/error messages. (WIP)
### Potential caveats
* There is no security, nor encryption. This is intended to work between a daemon and a frontend, and is designed primarily considering all activity taking place on localhost. You can use ReactPHPs `SecureConnector` and `SecureServer` to encrypt the traffic, but this still allows anyone to connect and interact with the bus. If this sounds like something that should be changed, open a ticket.
2024-03-01 13:34:14 +00:00
## Installing
```shell
$ composer require noccylabs/react-command-bus:^0.1.0
```
## Usage
```php
2024-03-01 13:59:12 +00:00
// The registry holds the callable commands
$commands = new CommandRegistry();
// Register some function to call. The name here is "hello", and it will
// receive a Context holding the call context. Any passed data will be
// available as properties on the Context object.
$commands->register("hello", function (Context $context) {
// You don't have to, but you should return a promise from your
// commands.
2024-03-01 13:34:14 +00:00
return new Promise(function (callable $resolve) use ($context) {
2024-03-01 13:59:12 +00:00
Loop::addTimer(1, function () use ($context, $resolve) {
$resolve("Hello, {$context->name}");
});
2024-03-01 13:34:14 +00:00
});
});
2024-03-01 13:59:12 +00:00
// Create the bus
$bus = new CommandBus($commands);
2024-03-01 13:34:14 +00:00
2024-03-01 13:59:12 +00:00
// And execute some commands!
$bus->execute('hello', ['name'=>'Bob'])->then(
function ($result) {
var_dump($result);
}
);
2024-03-01 13:34:14 +00:00
```