A flexible command bus for ReactPHP
Christopher Vagnetoft
07f8ae467c
* Add CommandResolverInterface to resolve commands. * Replace single CommandRegistry with CommandResolverInterface[] in CommandBus. * Make CommandRegistry implement CommandResolverInterface. |
||
---|---|---|
examples | ||
src | ||
tests | ||
.gitignore | ||
composer.json | ||
LICENSE | ||
Makefile | ||
phpstan.neon | ||
phpunit.xml | ||
README.md |
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
andSecureServer
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
$ composer require noccylabs/react-command-bus:^0.1.0
Usage
// 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/.