65 lines
2.3 KiB
Markdown
65 lines
2.3 KiB
Markdown
# Command Bus for ReactPHP
|
|
|
|
## 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 listeners and clients.
|
|
* All commands called asynchronously using promises and deferreds.
|
|
* Push notifications from the bus to subscribers and listeners, such as progress or log/error messages.
|
|
|
|
### 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.
|
|
|
|
## Installing
|
|
|
|
```shell
|
|
$ composer require noccylabs/react-command-bus:^0.1.0
|
|
```
|
|
|
|
## Usage
|
|
|
|
```php
|
|
// 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.
|
|
return new Promise(function (callable $resolve) use ($context) {
|
|
Loop::addTimer(1, function () use ($context, $resolve) {
|
|
$resolve("Hello, {$context->name}");
|
|
});
|
|
});
|
|
});
|
|
|
|
// Create the bus
|
|
$bus = new CommandBus($commands);
|
|
|
|
// And execute some commands!
|
|
$bus->execute('hello', ['name'=>'Bob'])->then(
|
|
function ($result) {
|
|
var_dump($result);
|
|
}
|
|
);
|
|
```
|
|
|
|
## License
|
|
|
|
Copyright (C) 2024, NoccyLabs
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <https://www.gnu.org/licenses/>.
|