From e1eb9d8824b9347cd7c645e8aebcb492bde6eb53 Mon Sep 17 00:00:00 2001 From: Simon Hamp Date: Sat, 11 Nov 2017 12:25:48 +0000 Subject: [PATCH 01/16] Tidy up default config file --- src/config/ratchet.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/config/ratchet.php b/src/config/ratchet.php index c10c1c0..d8e330f 100644 --- a/src/config/ratchet.php +++ b/src/config/ratchet.php @@ -16,13 +16,13 @@ 'port' => '8080', 'connectionLimit' => false, 'throttle' => [ - 'onOpen' => '5:1', - 'onMessage' => '20:1', - ], + 'onOpen' => '5:1', + 'onMessage' => '20:1', + ], 'abortOnMessageThrottle' => false, 'blackList' => collect([]), 'zmq' => [ 'host' => '127.0.0.1', 'port' => 5555, - ], + ], ]; From cce076dc5c7cc5dd5aae552f10a213f247a5aa1b Mon Sep 17 00:00:00 2001 From: Simon Hamp Date: Sat, 11 Nov 2017 13:14:14 +0000 Subject: [PATCH 02/16] 'Simplify' the command file and ranmae the base classes It's more modular now and has a slightly easier to follow flow. `$serverInstance` is mutable and changes throughout the bootup sequence as more parts are added. $ratchetServer is always an instance of the class used at the outset. --- src/Console/Commands/RatchetServerCommand.php | 250 ++++++++++++------ src/{Pusher.php => RatchetWampServer.php} | 3 +- ...{RatchetServer.php => RatchetWsServer.php} | 10 +- src/config/ratchet.php | 5 +- src/lang/en/messages.php | 6 +- 5 files changed, 175 insertions(+), 99 deletions(-) rename src/{Pusher.php => RatchetWampServer.php} (98%) rename src/{RatchetServer.php => RatchetWsServer.php} (94%) diff --git a/src/Console/Commands/RatchetServerCommand.php b/src/Console/Commands/RatchetServerCommand.php index 35d89ff..b9231cc 100644 --- a/src/Console/Commands/RatchetServerCommand.php +++ b/src/Console/Commands/RatchetServerCommand.php @@ -2,23 +2,30 @@ namespace Askedio\LaravelRatchet\Console\Commands; -use Illuminate\Console\Command; use Ratchet\Http\HttpServer; +use Ratchet\Wamp\WampServer; use Ratchet\Server\IoServer; use Ratchet\Server\IpBlackList; -use Ratchet\Wamp\WampServer; use Ratchet\WebSocket\WsServer; +use Illuminate\Console\Command; +use React\EventLoop\LoopInterface; +use React\ZMQ\Context as ZMQContext; +use Ratchet\Wamp\WampServerInterface; +use Ratchet\MessageComponentInterface; +use React\Socket\Server as SocketServer; +use React\EventLoop\Factory as EventLoop; +use Askedio\LaravelRatchet\RatchetWsServer; +use Askedio\LaravelRatchet\RatchetWampServer; use Symfony\Component\Console\Input\InputOption; class RatchetServerCommand extends Command { /** - * The console command name. + * The name of the console command. * * @var string */ protected $name = 'ratchet:serve'; - /** * The console command description. * @@ -41,149 +48,218 @@ class RatchetServerCommand extends Command protected $port; /** - * Create a new command instance. + * The class to use for the server. * - * @return void + * @var string */ - public function __construct() - { - parent::__construct(); - } + protected $class; - public function handle() + /** + * The type of server to boot. + * + * @var string + */ + protected $driver; + + /** + * The ReactPHP event loop. + * + * @var LoopInterface + */ + protected $eventLoop; + + /** + * The mutable server instance. + * + * @var mixed + */ + protected $serverInstance; + + /** + * The original instance of $this->class + */ + protected $ratchetServer; + + /** + * Get the console command options. + * + * @return array + */ + protected function getOptions() { - $this->fire(); + return [ + ['host', null, InputOption::VALUE_OPTIONAL, 'Ratchet server host', config('ratchet.host', '0.0.0.0')], + ['port', 'p', InputOption::VALUE_OPTIONAL, 'Ratchet server port', config('ratchet.port', 8080)], + ['class', null, InputOption::VALUE_OPTIONAL, 'Class that implements MessageComponentInterface.', config('ratchet.class')], + ['driver', null, InputOption::VALUE_OPTIONAL, 'Ratchet connection driver [IoServer|WsServer|WampServer]', 'WampServer'], + ['zmq', 'z', null, 'Bind server to a ZeroMQ socket (always on for WampServer)'], + ]; } /** * Execute the console command. - * - * @return mixed */ - public function fire() + public function handle() { $this->host = $this->option('host'); $this->port = intval($this->option('port')); - $this->info(sprintf('Starting %s server on: %s:%d', $this->option('driver'), $this->host, $this->port)); + $this->class = $this->option('class'); + + $this->driver = $this->option('driver'); - $this->server($this->option('driver'))->run(); + $this->startServer(); } /** - * Get the IO driver. + * Start the appropriate server. * - * @param [type] $driver [description] - * - * @return [type] [description] + * @param string $driver */ - private function getDriver($driver) + private function startServer($driver = null) { - $class = $this->option('class'); + if (! $driver) { + $driver = $this->driver; + } + + $this->info(sprintf('Starting %s server on: %s:%d', $this->option('driver'), $this->host, $this->port)); - $ratchetServer = new IpBlackList(new $class($this)); + $this->createServerInstance(); - foreach (config('ratchet.blackList')->all() as $host) { - $ratchetServer->blockAddress($host); - } + $this->{'start'.$driver}()->run(); + } - if ($driver == 'WsServer') { - return $this->getWsServerDriver($ratchetServer); + /** + * Get/generate the server instance from the class provided. + */ + private function createServerInstance() + { + if (! $this->serverInstance instanceof $this->class) { + $class = $this->class; + $this->serverInstance = $this->ratchetServer = new $class($this); } + } - return $ratchetServer; + /** + * Decorate a server instance with a blacklist instance and block any blacklisted addresses. + */ + private function bootWithBlacklist() + { + $this->serverInstance = new IpBlackList($this->serverInstance); + + foreach (config('ratchet.blackList')->all() as $host) { + $this->serverInstance->blockAddress($host); + } } /** - * Get the WsServer driver. - * - * @param [type] $ratchetServer [description] + * Decorate the server instance with a WebSocket server. * - * @return [type] [description] + * @param bool $withZmq + * @return IoServer */ - private function getWsServerDriver($ratchetServer) + private function bootWebSocketServer($withZmq = false) { - return new HttpServer( - new WsServer( - $ratchetServer - ) + if ($withZmq || $this->option('zmq')) { + $this->bootZmqConnection(); + } + + $this->serverInstance = new HttpServer( + new WsServer($this->serverInstance) ); + + return $this->bootIoServer(); } /** - * Get the WampServer driver. - * - * @param [type] $ratchetServer [description] + * Deploy a WampServer * - * @return [type] [description] + * @return IoServer */ private function startWampServer() { - $loop = \React\EventLoop\Factory::create(); - - $class = $this->option('class'); + if (! $this->serverInstance instanceof RatchetWampServer) { + throw new \Exception("{$this->class} must be an instance of ".RatchetWampServer::class." to create a Wamp server"); + } - $ratchetServer = new $class($this); + // Decorate the server instance with a WampServer + $this->serverInstance = new WampServer($this->serverInstance); - $this->info(sprintf('Starting ZMQ server on: %s:%s', config('ratchet.zmq.host'), config('ratchet.zmq.port'))); + return $this->bootWebSocketServer(true); + } - $context = new \React\ZMQ\Context($loop); - $pull = $context->getSocket(\ZMQ::SOCKET_PULL); - $pull->bind(sprintf('tcp://%s:%d', config('ratchet.zmq.host'), config('ratchet.zmq.port'))); + /** + * Deploy a WsServer. + * + * @return IoServer + */ + private function startWsServer() + { + if (! $this->serverInstance instanceof RatchetWsServer) { + throw new \Exception("{$this->class} must be an instance of ".RatchetWsServer::class." to create a WebSocket server"); + } - $pull->on('message', function ($message) use ($ratchetServer) { - $ratchetServer->onEntry($message); - }); + $this->bootWithBlacklist(); + return $this->bootWebSocketServer(); + } - $webSock = new \React\Socket\Server($this->host.':'.$this->port, $loop); - $webServer = new \Ratchet\Server\IoServer( - new \Ratchet\Http\HttpServer( - new \Ratchet\WebSocket\WsServer( - new \Ratchet\Wamp\WampServer( - $ratchetServer - ) - ) - ), - $webSock - ); + /** + * Deploy an IoServer only + * + * @return IoServer + */ + private function startIoServer() + { + $this->bootWithBlacklist(); - return $loop; + return $this->bootIoServer(); } /** - * Return the IoServer factory. + * Create the IoServer instance to encapsulate our server in. * - * @param [type] $driver [description] - * - * @return [type] [description] + * @return IoServer */ - private function server($driver) + private function bootIoServer() { - if ($driver == 'WampServer') { - return $this->startWampServer(); - } + $socket = new SocketServer($this->host.':'.$this->port, $this->getEventLoop()); - return IoServer::factory( - $this->getDriver($driver), - $this->port, - $this->host + return new IoServer( + $this->serverInstance, + $socket, + $this->getEventLoop() ); } /** - * Get the console command options. + * Boot a ZMQ listener and let the Ratchet server handle its events. + */ + private function bootZmqConnection() + { + $this->info(sprintf('Starting ZMQ listener on: %s:%s', config('ratchet.zmq.host'), config('ratchet.zmq.port'))); + + $context = new ZMQContext($this->getEventLoop()); + $socket = $context->getSocket(config('ratchet.zmq.method', \ZMQ::SOCKET_PULL)); + $socket->bind(sprintf('tcp://%s:%d', config('ratchet.zmq.host', '127.0.0.1'), config('ratchet.zmq.port', 5555))); + + $socket->on('message', function ($message) { + $this->ratchetServer->onEntry($message); + }); + } + + /** + * Generate and return a React EventLoop object. * - * @return array + * @return LoopInterface */ - protected function getOptions() + private function getEventLoop() { - return [ - ['host', null, InputOption::VALUE_OPTIONAL, 'Ratchet server host', config('ratchet.host', '0.0.0.0')], - ['port', 'p', InputOption::VALUE_OPTIONAL, 'Ratchet server port', config('ratchet.port', 8080)], - ['class', null, InputOption::VALUE_OPTIONAL, 'Class that implements MessageComponentInterface.', config('ratchet.class')], - ['driver', null, InputOption::VALUE_OPTIONAL, 'Ratchet connection driver [IoServer|WsServer|WampServer]', 'WampServer'], - ]; + if (! $this->eventLoop instanceof LoopInterface) { + $this->eventLoop = EventLoop::create(); + } + + return $this->eventLoop; } } diff --git a/src/Pusher.php b/src/RatchetWampServer.php similarity index 98% rename from src/Pusher.php rename to src/RatchetWampServer.php index ab51706..9676c77 100644 --- a/src/Pusher.php +++ b/src/RatchetWampServer.php @@ -5,11 +5,10 @@ use Ratchet\ConnectionInterface; use Ratchet\Wamp\WampServerInterface; -class Pusher implements WampServerInterface +abstract class RatchetWampServer implements WampServerInterface { public $subscribedTopics = []; - protected $console = false; public function __construct($console) diff --git a/src/RatchetServer.php b/src/RatchetWsServer.php similarity index 94% rename from src/RatchetServer.php rename to src/RatchetWsServer.php index f731121..04dc7fa 100644 --- a/src/RatchetServer.php +++ b/src/RatchetWsServer.php @@ -2,11 +2,11 @@ namespace Askedio\LaravelRatchet; -use GrahamCampbell\Throttle\Facades\Throttle; use Ratchet\ConnectionInterface; use Ratchet\MessageComponentInterface; +use GrahamCampbell\Throttle\Facades\Throttle; -abstract class RatchetServer implements MessageComponentInterface +abstract class RatchetWsServer implements MessageComponentInterface { /** * Clients. @@ -88,7 +88,7 @@ private function throttle() { if ($this->isThrottled($this->conn, 'onOpen')) { $this->console->info(sprintf('Connection throttled: %d', $this->conn->resourceId)); - $this->conn->send(trans('ratchet::messages.toManyConnectionAttempts')); + $this->conn->send(trans('ratchet::messages.tooManyConnectionAttempts')); $this->throttled = true; $this->conn->close(); } @@ -105,7 +105,7 @@ private function limit() { if ($connectionLimit = config('ratchet.connectionLimit') && $this->connections - 1 >= $connectionLimit) { $this->console->info(sprintf('To many connections: %d of %d', $this->connections - 1, $connectionLimit)); - $this->conn->send(trans('ratchet::messages.toManyConnections')); + $this->conn->send(trans('ratchet::messages.tooManyConnections')); $this->conn->close(); } @@ -148,7 +148,7 @@ public function onMessage(ConnectionInterface $conn, $input) if ($this->isThrottled($conn, 'onMessage')) { $this->console->info(sprintf('Message throttled: %d', $conn->resourceId)); - $this->send($conn, trans('ratchet::messages.toManyMessages')); + $this->send($conn, trans('ratchet::messages.tooManyMessages')); $this->throttled = true; if (config('ratchet.abortOnMessageThrottle')) { diff --git a/src/config/ratchet.php b/src/config/ratchet.php index d8e330f..2900129 100644 --- a/src/config/ratchet.php +++ b/src/config/ratchet.php @@ -22,7 +22,8 @@ 'abortOnMessageThrottle' => false, 'blackList' => collect([]), 'zmq' => [ - 'host' => '127.0.0.1', - 'port' => 5555, + 'host' => '127.0.0.1', + 'port' => 5555, + 'method' => \ZMQ::SOCKET_PULL, ], ]; diff --git a/src/lang/en/messages.php b/src/lang/en/messages.php index 89b6a5e..e363c58 100644 --- a/src/lang/en/messages.php +++ b/src/lang/en/messages.php @@ -11,7 +11,7 @@ | */ - 'toManyConnectionAttempts' => json_encode(['error' => 'toManyConnectionAttempts']), - 'toManyConnections' => json_encode(['error' => 'toManyConnections']), - 'toManyMessages' => json_encode(['error' => 'toManyMessages']), + 'tooManyConnectionAttempts' => json_encode(['error' => 'tooManyConnectionAttempts']), + 'tooManyConnections' => json_encode(['error' => 'tooManyConnections']), + 'tooManyMessages' => json_encode(['error' => 'tooManyMessages']), ]; From 08fc3bcf8f8fd7625d515b1d991a6aec03609265 Mon Sep 17 00:00:00 2001 From: Simon Hamp Date: Sat, 11 Nov 2017 13:14:28 +0000 Subject: [PATCH 03/16] Remove unnecessary files --- src/Contracts/RatchetServer.php | 10 ---- src/PusherExample.php | 10 ---- src/PusherServer.php | 99 --------------------------------- src/RatchetServerExample.php | 20 ------- 4 files changed, 139 deletions(-) delete mode 100644 src/Contracts/RatchetServer.php delete mode 100644 src/PusherExample.php delete mode 100644 src/PusherServer.php delete mode 100644 src/RatchetServerExample.php diff --git a/src/Contracts/RatchetServer.php b/src/Contracts/RatchetServer.php deleted file mode 100644 index 11cc48e..0000000 --- a/src/Contracts/RatchetServer.php +++ /dev/null @@ -1,10 +0,0 @@ -throttled) { - $this->send($conn, sprintf('- %s', $input)); - } - } -} From 3ea077828fe9b45afd58011c85f762750c3f5c78 Mon Sep 17 00:00:00 2001 From: Simon Hamp Date: Sat, 11 Nov 2017 13:14:38 +0000 Subject: [PATCH 04/16] Code cleanup --- src/Providers/LaravelRatchetServiceProvider.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Providers/LaravelRatchetServiceProvider.php b/src/Providers/LaravelRatchetServiceProvider.php index 15bab41..4f2535b 100644 --- a/src/Providers/LaravelRatchetServiceProvider.php +++ b/src/Providers/LaravelRatchetServiceProvider.php @@ -2,8 +2,9 @@ namespace Askedio\LaravelRatchet\Providers; -use Askedio\LaravelRatchet\Console\Commands\RatchetServerCommand; use Illuminate\Support\ServiceProvider; +use GrahamCampbell\Throttle\ThrottleServiceProvider; +use Askedio\LaravelRatchet\Console\Commands\RatchetServerCommand; class LaravelRatchetServiceProvider extends ServiceProvider { @@ -14,7 +15,7 @@ class LaravelRatchetServiceProvider extends ServiceProvider */ public function register() { - $this->app->register(\GrahamCampbell\Throttle\ThrottleServiceProvider::class); + $this->app->register(ThrottleServiceProvider::class); $this->app->singleton('command.ratchet.serve', function () { return new RatchetServerCommand(); From 1184a7c4364234aac3979972a17c10211959161e Mon Sep 17 00:00:00 2001 From: Simon Hamp Date: Sat, 11 Nov 2017 13:15:39 +0000 Subject: [PATCH 05/16] PHP 7 end of support is soon! Let's start pushing people forwards --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 5ce3d18..142e964 100644 --- a/composer.json +++ b/composer.json @@ -5,7 +5,7 @@ "license": "MIT", "type": "library", "require": { - "php": ">=5.5.9", + "php": ">=7.1.0", "ext-zmq": "*", "laravel/framework": "5.5.*", "cboden/ratchet": "^0.4", From 566e4ca4769b5fb7271b625aff0222f98b6b4304 Mon Sep 17 00:00:00 2001 From: Simon Hamp Date: Sun, 12 Nov 2017 18:26:40 +0000 Subject: [PATCH 06/16] Allow for handling multiple messages --- src/Console/Commands/RatchetServerCommand.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Console/Commands/RatchetServerCommand.php b/src/Console/Commands/RatchetServerCommand.php index b9231cc..ce47fd8 100644 --- a/src/Console/Commands/RatchetServerCommand.php +++ b/src/Console/Commands/RatchetServerCommand.php @@ -244,6 +244,10 @@ private function bootZmqConnection() $socket = $context->getSocket(config('ratchet.zmq.method', \ZMQ::SOCKET_PULL)); $socket->bind(sprintf('tcp://%s:%d', config('ratchet.zmq.host', '127.0.0.1'), config('ratchet.zmq.port', 5555))); + $socket->on('messages', function ($messages) { + $this->ratchetServer->onEntry($messages); + }); + $socket->on('message', function ($message) { $this->ratchetServer->onEntry($message); }); From 4bea36f56bd7cfefa03b33b9bb9d39a7d661a1e5 Mon Sep 17 00:00:00 2001 From: Simon Hamp Date: Mon, 13 Nov 2017 11:33:17 +0000 Subject: [PATCH 07/16] Require laravel-zmq --- composer.json | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/composer.json b/composer.json index 142e964..abe4473 100644 --- a/composer.json +++ b/composer.json @@ -1,6 +1,6 @@ { "name": "askedio/laravel-ratchet", - "description": "A Ratchet Example", + "description": "A Ratchet Server built for Laravel", "keywords": ["laravel"], "license": "MIT", "type": "library", @@ -10,13 +10,20 @@ "laravel/framework": "5.5.*", "cboden/ratchet": "^0.4", "graham-campbell/throttle": "^6.0", - "react/zmq": "0.2.*|0.3.*" + "react/zmq": "0.2.*|0.3.*", + "pelim/laravel-zmq": "^0.2" }, "autoload": { "psr-4": { "Askedio\\LaravelRatchet\\": "src/" } }, + "repositories": [ + { + "type": "git", + "url": "git@github.com:simonhamp/laravel-zmq.git" + } + ], "extra": { "laravel": { "providers": [ From 13e1fb1da842bdeda6f1df57230199e7ac8065a6 Mon Sep 17 00:00:00 2001 From: Simon Hamp Date: Mon, 13 Nov 2017 11:33:52 +0000 Subject: [PATCH 08/16] Fix initial run experience with example server --- src/Examples/Pusher.php | 16 ++++++++++++++++ src/config/ratchet.php | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 src/Examples/Pusher.php diff --git a/src/Examples/Pusher.php b/src/Examples/Pusher.php new file mode 100644 index 0000000..6194fd1 --- /dev/null +++ b/src/Examples/Pusher.php @@ -0,0 +1,16 @@ +sendAll($entry[1]); + } +} diff --git a/src/config/ratchet.php b/src/config/ratchet.php index 2900129..d442d8c 100644 --- a/src/config/ratchet.php +++ b/src/config/ratchet.php @@ -11,7 +11,7 @@ | */ - 'class' => \Askedio\LaravelRatchet\PusherExample::class, + 'class' => \Askedio\LaravelRatchet\Examples\Pusher::class, 'host' => '0.0.0.0', 'port' => '8080', 'connectionLimit' => false, From f4801dd566f650cc9795693b87441dfdf315191c Mon Sep 17 00:00:00 2001 From: Simon Hamp Date: Mon, 13 Nov 2017 12:19:06 +0000 Subject: [PATCH 09/16] Add package auto-discovery for laravel-zmq As this package relies on my fork of that package, it's better to bundle it and expose via this package. --- composer.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/composer.json b/composer.json index abe4473..c1aeb99 100644 --- a/composer.json +++ b/composer.json @@ -27,7 +27,8 @@ "extra": { "laravel": { "providers": [ - "Askedio\\LaravelRatchet\\Providers\\LaravelRatchetServiceProvider" + "Askedio\\LaravelRatchet\\Providers\\LaravelRatchetServiceProvider", + "Pelim\\LaravelZmq\\ZmqServiceProvider" ] } } From d469482d11685bb32a5c6cdb289ecba97c3a2b2a Mon Sep 17 00:00:00 2001 From: Simon Hamp Date: Mon, 13 Nov 2017 12:47:53 +0000 Subject: [PATCH 10/16] Improve readme --- README.md | 211 ++++++++++++++++-------------------------------------- 1 file changed, 63 insertions(+), 148 deletions(-) diff --git a/README.md b/README.md index d4145a3..88372cb 100644 --- a/README.md +++ b/README.md @@ -1,171 +1,86 @@ -![Header](http://i.imgur.com/H1OQeOV.png) +# Laravel Ratchet Server -This package provides the artisan command `ratchet:serve` that will start a [Ratchet](http://socketo.me/) [Io Server](http://socketo.me/docs/server), [Web Socket](http://socketo.me/docs/websocket), or [Wamp Server](http://socketo.me/docs/wamp) with the class of your making. Included are a few functions like `abort()` `send()` and `sendAll()` to make some common tasks easier. +**This is an updated fork of Laravel Ratchet, built specifically to work with this [custom fork](https://github.com/simonhamp/echo) of Laravel Echo.** -# Supports -* WaServer, WampServer & IoServer -* IpBlackList -* Connection throttling -* Message throttling +This fork enables you to create and run a fully functioning WebSocket server in your Laravel app that works with Laravel's built-in [broadcasting](https://laravel.com/docs/5.5/broadcasting). +## Requirements +- PHP 7.1 +- ZeroMQ +- ext-zmq for PHP +## Installation -# Installation -Install with composer -~~~ -composer require askedio/laravel-ratchet -~~~ +Because this is a custom fork (and because I want to maintain compatibility with the original repo), the installation is a little more complicated. You must do all of this in your `composer.json` manually: -Register the `provider` in `config/app.php`. -~~~ -Askedio\LaravelRatchet\Providers\LaravelRatchetServiceProvider::class, -~~~ -Install [ZMQ](http://zeromq.org/intro:get-the-software) to use the `WampServer` driver. +```json +"require": { + "askedio/laravel-ratchet": "^2.0" +}, +"repositories": [ + { + "type": "git", + "url": "git@github.com:simonhamp/laravel-ratchet.git" + } +] +``` -~~~ -apt-get install php7.0-zmq -~~~ +The service provider is loaded automatically in Laravel 5.5 using Package Autodiscovery. -# Push Server -The default driver will create a simple Push server based on [Ratchets example](http://socketo.me/docs/push). +You **MUST** publish the vendor files so you can configure your server defaults. -~~~ -php artisan ratchet:serve +```bash +$ php artisan vendor:publish --provider=LaravelRatchetServiceProvider +$ php artisan vendor:publish --provider=ZmqServiceProvider +``` -Starting WampServer server on: 0.0.0.0:8080 -Starting ZMQ server on: 127.0.0.1:5555 -~~~ +## Starting the Server -Create your own class based on or extending [RatchetServerExample.php](https://github.com/Askedio/laravel-ratchet/blob/master/src/Pusher.php). +The quickest way to start a standard WebSocket server is simply by running: -Insert data to ZMQ using [the example](http://socketo.me/docs/push#editblogsubmission) provided by Ratchet. +```bash +$ php artisan ratchet:serve --driver=WsServer +``` +This will run a simple example server based on `src/Examples/Pusher.php`. -# Socket Server -Use the IoServer `driver` and the [RatchetServerExample.php](https://github.com/Askedio/laravel-ratchet/blob/master/src/RatchetServerExample.php) `class` to create a simple socket server. +It's possible to create a WampServer or an IoServer also. Use the `--help` switch on the command to find out more. -Here is an example you could use in your `App`. -~~~ -throttled) { - $this->send($conn, 'Hello you.'); +You can do this simply by passing the `-z` option, i.e.: - $this->sendAll('Hello everyone.'); +```bash +$ php artisan ratchet:serve --driver=WsServer -z +``` - $this->send($conn, 'Wait, I don\'t know you! Bye bye!'); +This will connect to the socket you define in your `config/ratchet.php` settings. **You MUST set the `ratchet.zmq.method` option to `\ZMQ::SOCKET_PULL` to work with broadcasting.** - $this->abort($conn); - } - } -} -~~~ -You'll need to change the class to in your command line or config. -~~~ -php artisan ratchet:serve --driver=IoServer --class="App\RatchetServer::class" -~~~ - -# Command Line -To use the default values from the configuration run the command as follows: -~~~ -php artisan ratchet:serve -~~~ -You can also define configuration items on the command line: -~~~ -php artisan ratchet:serve --help - -Usage: - ratchet:serve [options] - -Options: - --host[=HOST] Ratchet server host [default: "0.0.0.0"] - -p, --port[=PORT] Ratchet server port [default: "9090"] - --class[=CLASS] Class that implements MessageComponentInterface. [default: "Askedio\LaravelRatchet\RatchetServerExample"] - --driver[=DRIVER] Ratchet connection driver [IoServer|WsServer|WampServer] [default: "WampServer"] - ... -~~~ - - -# Configuration -There are several configuration values that you will want to change. Publish the configuration then you can edit `config/ratchet.php`. -~~~ -php artisan vendor:publish -~~~ -### Configuration Options -* **class**: Your MessageComponentInterface or WampServerInterface class. -* **host**: The host to listen on. -* **port**: The port to listen on. -* **connectionLimit**: The total number of connections allowed (RatchetServer only). -* **throttle**: [Throttle](https://github.com/GrahamCampbell/Laravel-Throttle) connections and messages. - * **onOpen**: limit:delay for connections. - * **onMessage**: limit:delay for messages. -* **abortOnMessageThrottle**: disconnect client when message throttle triggered. -* **blackList**: Collection or Model of the hosts to ban using [IpBlackList](http://socketo.me/docs/black). - -# Options -Send a message to the current connection. -~~~ -$this->send($conn, $message); -~~~ -Send a message to all connections. -~~~ -$this->sendAll($message); -~~~ -Close current connection. -~~~ -$this->abort($conn); -~~~ - -# Supervisor Configuration -> Supervisor is a client/server system that allows its users to control a number of processes on UNIX-like operating systems. - -Things crash and long running processes need to be monitored. We can use [Supervisor](http://supervisord.org/index.html) to help with this. - - -### Install supervisor. -~~~ -sudo apt-get install supervisor -~~~ -### Create the config. - -Replace `/home/forge/app.com/` with the path to your application. -~~~ -sudo cat < /etc/supervisor/conf.d/laravel-ratchet.conf -[program:laravel-ratchet] -process_name=%(program_name)s_%(process_num)02d -command=php /home/forge/app.com/artisan ratchet:serve -q -autostart=true -autorestart=true -user=vagrant -numprocs=1 -redirect_stderr=true -stdout_logfile=/home/forge/app.com/ratchet.log -EOF -~~~ -### Enable & Start. -~~~ -sudo supervisorctl reread - -sudo supervisorctl update - -supervisorctl start laravel-ratchet:* -~~~ - - -# Testing -See contributing. - -# Contributing -Write some tests, that'd be swell. +Set `BROADCASTING_DRIVER=zmq` in your `.env` and add the following ZeroMQ connection settings to your `config/broadcasting.php`: + +```php +'connections' => [ + 'zmq' => [ + 'driver' => 'zmq', + ], +] +``` + +And update the `config/zmq.php` with the same socket details, except **set `zmq.connections.publish.method` to `\ZMQ::SOCKET_PUSH`**. + +This will use ZeroMQ as the back-channel to broadcast your events from your Laravel application to the Ratchet WebSocket server. + +For your web clients to subscribe to channels through Ratchet, you will need to install [this custom fork of Laravel Echo](https://github.com/simonhamp/echo). + +## Acknowledgements + +This package would not be possible without the initial [awesome work](https://github.com/Askedio/laravel-ratchet) of [@gcphost](https://github.com/gcphost) of [Asked.io](https://medium.com/asked-io). + +Also, thanks to [@pelim](https://github.com/pelim) for creating his original [ZeroMQ broadcasting driver](https://github.com/pelim/laravel-zmq) for Laravel. From 410ae7f224b0c7c0f42eeec29d2aece7e6b529c9 Mon Sep 17 00:00:00 2001 From: Simon Hamp Date: Mon, 13 Nov 2017 12:50:38 +0000 Subject: [PATCH 11/16] Minor update of readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 88372cb..89d4f9a 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Laravel Ratchet Server -**This is an updated fork of Laravel Ratchet, built specifically to work with this [custom fork](https://github.com/simonhamp/echo) of Laravel Echo.** +**This is an updated fork of [Laravel Ratchet](https://github.com/Askedio/laravel-ratchet), built specifically to work with this [custom fork](https://github.com/simonhamp/echo) of Laravel Echo.** This fork enables you to create and run a fully functioning WebSocket server in your Laravel app that works with Laravel's built-in [broadcasting](https://laravel.com/docs/5.5/broadcasting). From b4a4098e2cabaf1aac9a0a8fe5c9f86f3938ee92 Mon Sep 17 00:00:00 2001 From: Simon Hamp Date: Mon, 13 Nov 2017 14:11:15 +0000 Subject: [PATCH 12/16] Update readme some more --- README.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 89d4f9a..bcb5ba4 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ This fork enables you to create and run a fully functioning WebSocket server in ## Installation -Because this is a custom fork (and because I want to maintain compatibility with the original repo), the installation is a little more complicated. You must do all of this in your `composer.json` manually: +Because this is a custom fork and it relies on another custom package (and because I want to maintain compatibility with the original repos), the installation is a little more complicated (for now). You must do all of this in your `composer.json` manually: ```json "require": { @@ -22,11 +22,15 @@ Because this is a custom fork (and because I want to maintain compatibility with { "type": "git", "url": "git@github.com:simonhamp/laravel-ratchet.git" + }, + { + "type": "git", + "url": "git@github.com:simonhamp/laravel-zmq.git" } ] ``` -The service provider is loaded automatically in Laravel 5.5 using Package Autodiscovery. +The service providers are loaded automatically in Laravel 5.5 using Package Autodiscovery. You **MUST** publish the vendor files so you can configure your server defaults. From fad83e8c07f9a9155109fa444cc302038ab99b95 Mon Sep 17 00:00:00 2001 From: Simon Hamp Date: Mon, 13 Nov 2017 14:44:12 +0000 Subject: [PATCH 13/16] Use GitHub public URL for laravel-zmq --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index c1aeb99..ef30db3 100644 --- a/composer.json +++ b/composer.json @@ -21,7 +21,7 @@ "repositories": [ { "type": "git", - "url": "git@github.com:simonhamp/laravel-zmq.git" + "url": "https://github.com/simonhamp/laravel-zmq.git" } ], "extra": { From 8420ccc7ac0a51c7c5cf177dd2ca0094cc9702f7 Mon Sep 17 00:00:00 2001 From: Simon Hamp Date: Mon, 13 Nov 2017 19:11:30 +0000 Subject: [PATCH 14/16] Reduce composer requirements Remove pelim/laravel-zmq again. Cut back all of Laravel to just what we actually use in *this* package that isn't provided elsewhere --- composer.json | 15 +- composer.lock | 1779 ++++++++++++++++++------------------------------- 2 files changed, 639 insertions(+), 1155 deletions(-) diff --git a/composer.json b/composer.json index ef30db3..dcdc7e8 100644 --- a/composer.json +++ b/composer.json @@ -7,28 +7,21 @@ "require": { "php": ">=7.1.0", "ext-zmq": "*", - "laravel/framework": "5.5.*", "cboden/ratchet": "^0.4", "graham-campbell/throttle": "^6.0", - "react/zmq": "0.2.*|0.3.*", - "pelim/laravel-zmq": "^0.2" + "illuminate/console": "5.5.*", + "illuminate/support": "5.5.*", + "react/zmq": "0.2.*|0.3.*" }, "autoload": { "psr-4": { "Askedio\\LaravelRatchet\\": "src/" } }, - "repositories": [ - { - "type": "git", - "url": "https://github.com/simonhamp/laravel-zmq.git" - } - ], "extra": { "laravel": { "providers": [ - "Askedio\\LaravelRatchet\\Providers\\LaravelRatchetServiceProvider", - "Pelim\\LaravelZmq\\ZmqServiceProvider" + "Askedio\\LaravelRatchet\\Providers\\LaravelRatchetServiceProvider" ] } } diff --git a/composer.lock b/composer.lock index 8712dc5..9ee1838 100644 --- a/composer.lock +++ b/composer.lock @@ -4,30 +4,33 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "9034fb10ed1fccfcfef545884b723829", - "content-hash": "24444aabfca2f915d323e02a8fe3eb23", + "content-hash": "3b534573a87aa302e27794bbefd3e011", "packages": [ { "name": "cboden/ratchet", - "version": "v0.3.5", + "version": "v0.4", "source": { "type": "git", "url": "https://github.com/ratchetphp/Ratchet.git", - "reference": "b5ccecad9390db85d2c8df7cbeb047292fbbf4b8" + "reference": "c03b1b0f56d1732a4bffcdbef5eae444f8c9e73b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ratchetphp/Ratchet/zipball/b5ccecad9390db85d2c8df7cbeb047292fbbf4b8", - "reference": "b5ccecad9390db85d2c8df7cbeb047292fbbf4b8", + "url": "https://api.github.com/repos/ratchetphp/Ratchet/zipball/c03b1b0f56d1732a4bffcdbef5eae444f8c9e73b", + "reference": "c03b1b0f56d1732a4bffcdbef5eae444f8c9e73b", "shasum": "" }, "require": { - "guzzle/http": "^3.6", - "php": ">=5.3.9", - "react/socket": "^0.3 || ^0.4", + "guzzlehttp/psr7": "^1.0", + "php": ">=5.4.2", + "ratchet/rfc6455": "^0.2", + "react/socket": "^1.0 || ^0.8 || ^0.7 || ^0.6 || ^0.5", "symfony/http-foundation": "^2.2|^3.0", "symfony/routing": "^2.2|^3.0" }, + "require-dev": { + "phpunit/phpunit": "~4.8" + }, "type": "library", "autoload": { "psr-4": { @@ -51,126 +54,40 @@ "Ratchet", "WebSockets", "server", - "sockets" - ], - "time": "2016-05-25 12:55:03" - }, - { - "name": "classpreloader/classpreloader", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/ClassPreloader/ClassPreloader.git", - "reference": "9b10b913c2bdf90c3d2e0d726b454fb7f77c552a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ClassPreloader/ClassPreloader/zipball/9b10b913c2bdf90c3d2e0d726b454fb7f77c552a", - "reference": "9b10b913c2bdf90c3d2e0d726b454fb7f77c552a", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^1.0|^2.0", - "php": ">=5.5.9" - }, - "require-dev": { - "phpunit/phpunit": "^4.8|^5.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "psr-4": { - "ClassPreloader\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com" - }, - { - "name": "Graham Campbell", - "email": "graham@alt-three.com" - } - ], - "description": "Helps class loading performance by generating a single PHP file containing all of the autoloaded files for a specific use case", - "keywords": [ - "autoload", - "class", - "preload" - ], - "time": "2015-11-09 22:51:51" - }, - { - "name": "dnoegel/php-xdg-base-dir", - "version": "0.1", - "source": { - "type": "git", - "url": "https://github.com/dnoegel/php-xdg-base-dir.git", - "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/265b8593498b997dc2d31e75b89f053b5cc9621a", - "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "require-dev": { - "phpunit/phpunit": "@stable" - }, - "type": "project", - "autoload": { - "psr-4": { - "XdgBaseDir\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" + "sockets", + "websocket" ], - "description": "implementation of xdg base directory specification for php", - "time": "2014-10-24 07:27:01" + "time": "2017-09-14T12:18:28+00:00" }, { "name": "doctrine/inflector", - "version": "v1.1.0", + "version": "v1.2.0", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "90b2128806bfde671b6952ab8bea493942c1fdae" + "reference": "e11d84c6e018beedd929cff5220969a3c6d1d462" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/90b2128806bfde671b6952ab8bea493942c1fdae", - "reference": "90b2128806bfde671b6952ab8bea493942c1fdae", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/e11d84c6e018beedd929cff5220969a3c6d1d462", + "reference": "e11d84c6e018beedd929cff5220969a3c6d1d462", "shasum": "" }, "require": { - "php": ">=5.3.2" + "php": "^7.0" }, "require-dev": { - "phpunit/phpunit": "4.*" + "phpunit/phpunit": "^6.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "1.2.x-dev" } }, "autoload": { - "psr-0": { - "Doctrine\\Common\\Inflector\\": "lib/" + "psr-4": { + "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector" } }, "notification-url": "https://packagist.org/downloads/", @@ -207,25 +124,28 @@ "singularize", "string" ], - "time": "2015-11-06 14:35:42" + "time": "2017-07-22T12:18:28+00:00" }, { "name": "evenement/evenement", - "version": "v2.0.0", + "version": "v2.1.0", "source": { "type": "git", "url": "https://github.com/igorw/evenement.git", - "reference": "f6e843799fd4f4184d54d8fc7b5b3551c9fa803e" + "reference": "6ba9a777870ab49f417e703229d53931ed40fd7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/igorw/evenement/zipball/f6e843799fd4f4184d54d8fc7b5b3551c9fa803e", - "reference": "f6e843799fd4f4184d54d8fc7b5b3551c9fa803e", + "url": "https://api.github.com/repos/igorw/evenement/zipball/6ba9a777870ab49f417e703229d53931ed40fd7a", + "reference": "6ba9a777870ab49f417e703229d53931ed40fd7a", "shasum": "" }, "require": { "php": ">=5.4.0" }, + "require-dev": { + "phpunit/phpunit": "^6.0||^5.7||^4.8.35" + }, "type": "library", "extra": { "branch-alias": { @@ -244,8 +164,7 @@ "authors": [ { "name": "Igor Wiedler", - "email": "igor@wiedler.ch", - "homepage": "http://wiedler.ch/igor/" + "email": "igor@wiedler.ch" } ], "description": "Événement is a very simple event dispatching library for PHP", @@ -253,38 +172,44 @@ "event-dispatcher", "event-emitter" ], - "time": "2012-11-02 14:49:47" + "time": "2017-07-17T17:39:19+00:00" }, { "name": "graham-campbell/throttle", - "version": "v5.2.0", + "version": "v6.0.0", "source": { "type": "git", "url": "https://github.com/GrahamCampbell/Laravel-Throttle.git", - "reference": "df582a0defd288f9be1d71ad2e78bffe9355b628" + "reference": "4fcfb5f1a8748fe8d117cb4f5af668a6278ee73d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Laravel-Throttle/zipball/df582a0defd288f9be1d71ad2e78bffe9355b628", - "reference": "df582a0defd288f9be1d71ad2e78bffe9355b628", + "url": "https://api.github.com/repos/GrahamCampbell/Laravel-Throttle/zipball/4fcfb5f1a8748fe8d117cb4f5af668a6278ee73d", + "reference": "4fcfb5f1a8748fe8d117cb4f5af668a6278ee73d", "shasum": "" }, "require": { - "illuminate/cache": "5.1.*|5.2.*|5.3.*", - "illuminate/contracts": "5.1.*|5.2.*|5.3.*", - "illuminate/http": "5.1.*|5.2.*|5.3.*", - "illuminate/support": "5.1.*|5.2.*|5.3.*", - "php": ">=5.5.9" + "illuminate/cache": "5.1.*|5.2.*|5.3.*|5.4.*|5.5.*", + "illuminate/contracts": "5.1.*|5.2.*|5.3.*|5.4.*|5.5.*", + "illuminate/http": "5.1.*|5.2.*|5.3.*|5.4.*|5.5.*", + "illuminate/support": "5.1.*|5.2.*|5.3.*|5.4.*|5.5.*", + "php": "^7.0" }, "require-dev": { - "graham-campbell/testbench": "^3.1", - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^4.8|^5.0" + "graham-campbell/analyzer": "^1.1", + "graham-campbell/testbench": "^4.0", + "mockery/mockery": "dev-master#c90a17247147543081e4d00f46911e422b49e583", + "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.2-dev" + "dev-master": "6.0-dev" + }, + "laravel": { + "providers": [ + "GrahamCampbell\\Throttle\\ThrottleServiceProvider" + ] } }, "autoload": { @@ -314,86 +239,106 @@ "throttle", "throttling" ], - "time": "2016-04-26 14:29:52" + "time": "2017-08-06T20:52:22+00:00" }, { - "name": "guzzle/common", - "version": "v3.9.2", - "target-dir": "Guzzle/Common", + "name": "guzzlehttp/psr7", + "version": "1.4.2", "source": { "type": "git", - "url": "https://github.com/Guzzle3/common.git", - "reference": "2e36af7cf2ce3ea1f2d7c2831843b883a8e7b7dc" + "url": "https://github.com/guzzle/psr7.git", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Guzzle3/common/zipball/2e36af7cf2ce3ea1f2d7c2831843b883a8e7b7dc", - "reference": "2e36af7cf2ce3ea1f2d7c2831843b883a8e7b7dc", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c", "shasum": "" }, "require": { - "php": ">=5.3.2", - "symfony/event-dispatcher": ">=2.1" + "php": ">=5.4.0", + "psr/http-message": "~1.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.7-dev" + "dev-master": "1.4-dev" } }, "autoload": { - "psr-0": { - "Guzzle\\Common": "" - } + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "Common libraries used by Guzzle", - "homepage": "http://guzzlephp.org/", + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", "keywords": [ - "collection", - "common", - "event", - "exception" + "http", + "message", + "request", + "response", + "stream", + "uri", + "url" ], - "abandoned": "guzzle/guzzle", - "time": "2014-08-11 04:32:36" + "time": "2017-03-20T17:10:46+00:00" }, { - "name": "guzzle/http", - "version": "v3.9.2", - "target-dir": "Guzzle/Http", + "name": "illuminate/cache", + "version": "v5.5.17", "source": { "type": "git", - "url": "https://github.com/Guzzle3/http.git", - "reference": "1e8dd1e2ba9dc42332396f39fbfab950b2301dc5" + "url": "https://github.com/illuminate/cache.git", + "reference": "709f1c7da68b65421b3590f5258e158232f33836" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Guzzle3/http/zipball/1e8dd1e2ba9dc42332396f39fbfab950b2301dc5", - "reference": "1e8dd1e2ba9dc42332396f39fbfab950b2301dc5", + "url": "https://api.github.com/repos/illuminate/cache/zipball/709f1c7da68b65421b3590f5258e158232f33836", + "reference": "709f1c7da68b65421b3590f5258e158232f33836", "shasum": "" }, "require": { - "guzzle/common": "self.version", - "guzzle/parser": "self.version", - "guzzle/stream": "self.version", - "php": ">=5.3.2" + "illuminate/contracts": "5.5.*", + "illuminate/support": "5.5.*", + "php": ">=7.0" }, "suggest": { - "ext-curl": "*" + "illuminate/database": "Required to use the database cache driver (5.5.*).", + "illuminate/filesystem": "Required to use the file cache driver (5.5.*).", + "illuminate/redis": "Required to use the redis cache driver (5.5.*)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.7-dev" + "dev-master": "5.5-dev" } }, "autoload": { - "psr-0": { - "Guzzle\\Http": "" + "psr-4": { + "Illuminate\\Cache\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -402,99 +347,92 @@ ], "authors": [ { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" + "name": "Taylor Otwell", + "email": "taylor@laravel.com" } ], - "description": "HTTP libraries used by Guzzle", - "homepage": "http://guzzlephp.org/", - "keywords": [ - "Guzzle", - "client", - "curl", - "http", - "http client" - ], - "abandoned": "guzzle/guzzle", - "time": "2014-08-11 04:32:36" + "description": "The Illuminate Cache package.", + "homepage": "https://laravel.com", + "time": "2017-09-19T17:21:01+00:00" }, { - "name": "guzzle/parser", - "version": "v3.9.2", - "target-dir": "Guzzle/Parser", + "name": "illuminate/console", + "version": "v5.5.17", "source": { "type": "git", - "url": "https://github.com/Guzzle3/parser.git", - "reference": "6874d171318a8e93eb6d224cf85e4678490b625c" + "url": "https://github.com/illuminate/console.git", + "reference": "aba6876d2afae19c413af805c298099ed068e24e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Guzzle3/parser/zipball/6874d171318a8e93eb6d224cf85e4678490b625c", - "reference": "6874d171318a8e93eb6d224cf85e4678490b625c", + "url": "https://api.github.com/repos/illuminate/console/zipball/aba6876d2afae19c413af805c298099ed068e24e", + "reference": "aba6876d2afae19c413af805c298099ed068e24e", "shasum": "" }, "require": { - "php": ">=5.3.2" + "illuminate/contracts": "5.5.*", + "illuminate/support": "5.5.*", + "php": ">=7.0", + "symfony/console": "~3.3" + }, + "suggest": { + "guzzlehttp/guzzle": "Required to use the ping methods on schedules (~6.0).", + "mtdowling/cron-expression": "Required to use scheduling component (~1.0).", + "symfony/process": "Required to use scheduling component (~3.3)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.7-dev" + "dev-master": "5.5-dev" } }, "autoload": { - "psr-0": { - "Guzzle\\Parser": "" + "psr-4": { + "Illuminate\\Console\\": "" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "Interchangeable parsers used by Guzzle", - "homepage": "http://guzzlephp.org/", - "keywords": [ - "URI Template", - "cookie", - "http", - "message", - "url" + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } ], - "abandoned": "guzzle/guzzle", - "time": "2014-02-05 18:29:46" + "description": "The Illuminate Console package.", + "homepage": "https://laravel.com", + "time": "2017-09-30T15:05:30+00:00" }, { - "name": "guzzle/stream", - "version": "v3.9.2", - "target-dir": "Guzzle/Stream", + "name": "illuminate/contracts", + "version": "v5.5.17", "source": { "type": "git", - "url": "https://github.com/Guzzle3/stream.git", - "reference": "60c7fed02e98d2c518dae8f97874c8f4622100f0" + "url": "https://github.com/illuminate/contracts.git", + "reference": "d9e269284eba43bd2e9e8d1f1ba12362b00ec096" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Guzzle3/stream/zipball/60c7fed02e98d2c518dae8f97874c8f4622100f0", - "reference": "60c7fed02e98d2c518dae8f97874c8f4622100f0", + "url": "https://api.github.com/repos/illuminate/contracts/zipball/d9e269284eba43bd2e9e8d1f1ba12362b00ec096", + "reference": "d9e269284eba43bd2e9e8d1f1ba12362b00ec096", "shasum": "" }, "require": { - "guzzle/common": "self.version", - "php": ">=5.3.2" - }, - "suggest": { - "guzzle/http": "To convert Guzzle request objects to PHP streams" + "php": ">=7.0", + "psr/container": "~1.0", + "psr/simple-cache": "~1.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.7-dev" + "dev-master": "5.5-dev" } }, "autoload": { - "psr-0": { - "Guzzle\\Stream": "" + "psr-4": { + "Illuminate\\Contracts\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -503,93 +441,94 @@ ], "authors": [ { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" + "name": "Taylor Otwell", + "email": "taylor@laravel.com" } ], - "description": "Guzzle stream wrapper component", - "homepage": "http://guzzlephp.org/", - "keywords": [ - "Guzzle", - "component", - "stream" - ], - "abandoned": "guzzle/guzzle", - "time": "2014-05-01 21:36:02" + "description": "The Illuminate Contracts package.", + "homepage": "https://laravel.com", + "time": "2017-09-19T13:09:37+00:00" }, { - "name": "jakub-onderka/php-console-color", - "version": "0.1", + "name": "illuminate/filesystem", + "version": "v5.5.17", "source": { "type": "git", - "url": "https://github.com/JakubOnderka/PHP-Console-Color.git", - "reference": "e0b393dacf7703fc36a4efc3df1435485197e6c1" + "url": "https://github.com/illuminate/filesystem.git", + "reference": "9e45ea9a64787455944bca2c6588cf2da085c360" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Color/zipball/e0b393dacf7703fc36a4efc3df1435485197e6c1", - "reference": "e0b393dacf7703fc36a4efc3df1435485197e6c1", + "url": "https://api.github.com/repos/illuminate/filesystem/zipball/9e45ea9a64787455944bca2c6588cf2da085c360", + "reference": "9e45ea9a64787455944bca2c6588cf2da085c360", "shasum": "" }, "require": { - "php": ">=5.3.2" + "illuminate/contracts": "5.5.*", + "illuminate/support": "5.5.*", + "php": ">=7.0", + "symfony/finder": "~3.3" }, - "require-dev": { - "jakub-onderka/php-code-style": "1.0", - "jakub-onderka/php-parallel-lint": "0.*", - "jakub-onderka/php-var-dump-check": "0.*", - "phpunit/phpunit": "3.7.*", - "squizlabs/php_codesniffer": "1.*" + "suggest": { + "league/flysystem": "Required to use the Flysystem local and FTP drivers (~1.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (~1.0).", + "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (~1.0)." }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.5-dev" + } + }, "autoload": { - "psr-0": { - "JakubOnderka\\PhpConsoleColor": "src/" + "psr-4": { + "Illuminate\\Filesystem\\": "" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-2-Clause" + "MIT" ], "authors": [ { - "name": "Jakub Onderka", - "email": "jakub.onderka@gmail.com", - "homepage": "http://www.acci.cz" + "name": "Taylor Otwell", + "email": "taylor@laravel.com" } ], - "time": "2014-04-08 15:00:19" + "description": "The Illuminate Filesystem package.", + "homepage": "https://laravel.com", + "time": "2017-09-13T13:01:30+00:00" }, { - "name": "jakub-onderka/php-console-highlighter", - "version": "v0.3.2", + "name": "illuminate/http", + "version": "v5.5.17", "source": { "type": "git", - "url": "https://github.com/JakubOnderka/PHP-Console-Highlighter.git", - "reference": "7daa75df45242c8d5b75a22c00a201e7954e4fb5" + "url": "https://github.com/illuminate/http.git", + "reference": "8674315c3645b099bd7a706ea0ff3f7549ad5869" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Highlighter/zipball/7daa75df45242c8d5b75a22c00a201e7954e4fb5", - "reference": "7daa75df45242c8d5b75a22c00a201e7954e4fb5", + "url": "https://api.github.com/repos/illuminate/http/zipball/8674315c3645b099bd7a706ea0ff3f7549ad5869", + "reference": "8674315c3645b099bd7a706ea0ff3f7549ad5869", "shasum": "" }, "require": { - "jakub-onderka/php-console-color": "~0.1", - "php": ">=5.3.0" - }, - "require-dev": { - "jakub-onderka/php-code-style": "~1.0", - "jakub-onderka/php-parallel-lint": "~0.5", - "jakub-onderka/php-var-dump-check": "~0.1", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~1.5" + "illuminate/session": "5.5.*", + "illuminate/support": "5.5.*", + "php": ">=7.0", + "symfony/http-foundation": "~3.3", + "symfony/http-kernel": "~3.3" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.5-dev" + } + }, "autoload": { - "psr-0": { - "JakubOnderka\\PhpConsoleHighlighter": "src/" + "psr-4": { + "Illuminate\\Http\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -598,44 +537,48 @@ ], "authors": [ { - "name": "Jakub Onderka", - "email": "acci@acci.cz", - "homepage": "http://www.acci.cz/" + "name": "Taylor Otwell", + "email": "taylor@laravel.com" } ], - "time": "2015-04-20 18:58:01" + "description": "The Illuminate Http package.", + "homepage": "https://laravel.com", + "time": "2017-10-14T16:12:13+00:00" }, { - "name": "jeremeamia/SuperClosure", - "version": "2.2.0", + "name": "illuminate/session", + "version": "v5.5.17", "source": { "type": "git", - "url": "https://github.com/jeremeamia/super_closure.git", - "reference": "29a88be2a4846d27c1613aed0c9071dfad7b5938" + "url": "https://github.com/illuminate/session.git", + "reference": "36a4b585c3f56429c24849559a1890c0eed0c530" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jeremeamia/super_closure/zipball/29a88be2a4846d27c1613aed0c9071dfad7b5938", - "reference": "29a88be2a4846d27c1613aed0c9071dfad7b5938", + "url": "https://api.github.com/repos/illuminate/session/zipball/36a4b585c3f56429c24849559a1890c0eed0c530", + "reference": "36a4b585c3f56429c24849559a1890c0eed0c530", "shasum": "" }, "require": { - "nikic/php-parser": "^1.2|^2.0", - "php": ">=5.4", - "symfony/polyfill-php56": "^1.0" + "illuminate/contracts": "5.5.*", + "illuminate/filesystem": "5.5.*", + "illuminate/support": "5.5.*", + "php": ">=7.0", + "symfony/finder": "~3.3", + "symfony/http-foundation": "~3.3" }, - "require-dev": { - "phpunit/phpunit": "^4.0|^5.0" + "suggest": { + "illuminate/console": "Required to use the session:table command (5.5.*)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2-dev" + "dev-master": "5.5-dev" } }, "autoload": { "psr-4": { - "SuperClosure\\": "src/" + "Illuminate\\Session\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -644,134 +587,56 @@ ], "authors": [ { - "name": "Jeremy Lindblom", - "email": "jeremeamia@gmail.com", - "homepage": "https://github.com/jeremeamia", - "role": "Developer" + "name": "Taylor Otwell", + "email": "taylor@laravel.com" } ], - "description": "Serialize Closure objects, including their context and binding", - "homepage": "https://github.com/jeremeamia/super_closure", - "keywords": [ - "closure", - "function", - "lambda", - "parser", - "serializable", - "serialize", - "tokenizer" - ], - "time": "2015-12-05 17:17:57" + "description": "The Illuminate Session package.", + "homepage": "https://laravel.com", + "time": "2017-10-07T14:24:02+00:00" }, { - "name": "laravel/framework", - "version": "v5.3.15", + "name": "illuminate/support", + "version": "v5.5.17", "source": { "type": "git", - "url": "https://github.com/laravel/framework.git", - "reference": "f034a02f38db77d4b0b3e89942394cae456a627f" + "url": "https://github.com/illuminate/support.git", + "reference": "132b06edaab3808f63943004911d58785f164ab4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/f034a02f38db77d4b0b3e89942394cae456a627f", - "reference": "f034a02f38db77d4b0b3e89942394cae456a627f", + "url": "https://api.github.com/repos/illuminate/support/zipball/132b06edaab3808f63943004911d58785f164ab4", + "reference": "132b06edaab3808f63943004911d58785f164ab4", "shasum": "" }, "require": { - "classpreloader/classpreloader": "~3.0", - "doctrine/inflector": "~1.0", + "doctrine/inflector": "~1.1", "ext-mbstring": "*", - "ext-openssl": "*", - "jeremeamia/superclosure": "~2.2", - "league/flysystem": "~1.0", - "monolog/monolog": "~1.11", - "mtdowling/cron-expression": "~1.0", - "nesbot/carbon": "~1.20", - "paragonie/random_compat": "~1.4|~2.0", - "php": ">=5.6.4", - "psy/psysh": "0.7.*", - "ramsey/uuid": "~3.0", - "swiftmailer/swiftmailer": "~5.1", - "symfony/console": "3.1.*", - "symfony/debug": "3.1.*", - "symfony/finder": "3.1.*", - "symfony/http-foundation": "3.1.*", - "symfony/http-kernel": "3.1.*", - "symfony/process": "3.1.*", - "symfony/routing": "3.1.*", - "symfony/translation": "3.1.*", - "symfony/var-dumper": "3.1.*", - "vlucas/phpdotenv": "~2.2" + "illuminate/contracts": "5.5.*", + "nesbot/carbon": "^1.20", + "php": ">=7.0" }, "replace": { - "illuminate/auth": "self.version", - "illuminate/broadcasting": "self.version", - "illuminate/bus": "self.version", - "illuminate/cache": "self.version", - "illuminate/config": "self.version", - "illuminate/console": "self.version", - "illuminate/container": "self.version", - "illuminate/contracts": "self.version", - "illuminate/cookie": "self.version", - "illuminate/database": "self.version", - "illuminate/encryption": "self.version", - "illuminate/events": "self.version", - "illuminate/exception": "self.version", - "illuminate/filesystem": "self.version", - "illuminate/hashing": "self.version", - "illuminate/http": "self.version", - "illuminate/log": "self.version", - "illuminate/mail": "self.version", - "illuminate/notifications": "self.version", - "illuminate/pagination": "self.version", - "illuminate/pipeline": "self.version", - "illuminate/queue": "self.version", - "illuminate/redis": "self.version", - "illuminate/routing": "self.version", - "illuminate/session": "self.version", - "illuminate/support": "self.version", - "illuminate/translation": "self.version", - "illuminate/validation": "self.version", - "illuminate/view": "self.version", "tightenco/collect": "self.version" }, - "require-dev": { - "aws/aws-sdk-php": "~3.0", - "mockery/mockery": "~0.9.4", - "pda/pheanstalk": "~3.0", - "phpunit/phpunit": "~5.4", - "predis/predis": "~1.0", - "symfony/css-selector": "3.1.*", - "symfony/dom-crawler": "3.1.*" - }, "suggest": { - "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (~3.0).", - "doctrine/dbal": "Required to rename columns and drop SQLite columns (~2.4).", - "fzaninotto/faker": "Required to use the eloquent factory builder (~1.4).", - "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (~5.3|~6.0).", - "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (~1.0).", - "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (~1.0).", - "pda/pheanstalk": "Required to use the beanstalk queue driver (~3.0).", - "predis/predis": "Required to use the redis cache and queue drivers (~1.0).", - "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (~2.0).", - "symfony/css-selector": "Required to use some of the crawler integration testing tools (3.1.*).", - "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (3.1.*).", - "symfony/psr-http-message-bridge": "Required to psr7 bridging features (0.2.*)." + "illuminate/filesystem": "Required to use the composer class (5.2.*).", + "symfony/process": "Required to use the composer class (~3.3).", + "symfony/var-dumper": "Required to use the dd function (~3.3)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.3-dev" + "dev-master": "5.5-dev" } }, "autoload": { - "files": [ - "src/Illuminate/Foundation/helpers.php", - "src/Illuminate/Support/helpers.php" - ], "psr-4": { - "Illuminate\\": "src/Illuminate/" - } + "Illuminate\\Support\\": "" + }, + "files": [ + "helpers.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -783,63 +648,41 @@ "email": "taylor@laravel.com" } ], - "description": "The Laravel Framework.", + "description": "The Illuminate Support package.", "homepage": "https://laravel.com", - "keywords": [ - "framework", - "laravel" - ], - "time": "2016-09-29 22:13:17" + "time": "2017-10-17T12:18:29+00:00" }, { - "name": "league/flysystem", - "version": "1.0.27", + "name": "nesbot/carbon", + "version": "1.22.1", "source": { "type": "git", - "url": "https://github.com/thephpleague/flysystem.git", - "reference": "50e2045ed70a7e75a5e30bc3662904f3b67af8a9" + "url": "https://github.com/briannesbitt/Carbon.git", + "reference": "7cdf42c0b1cc763ab7e4c33c47a24e27c66bfccc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/50e2045ed70a7e75a5e30bc3662904f3b67af8a9", - "reference": "50e2045ed70a7e75a5e30bc3662904f3b67af8a9", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/7cdf42c0b1cc763ab7e4c33c47a24e27c66bfccc", + "reference": "7cdf42c0b1cc763ab7e4c33c47a24e27c66bfccc", "shasum": "" }, "require": { - "php": ">=5.4.0" - }, - "conflict": { - "league/flysystem-sftp": "<1.0.6" + "php": ">=5.3.0", + "symfony/translation": "~2.6 || ~3.0" }, "require-dev": { - "ext-fileinfo": "*", - "mockery/mockery": "~0.9", - "phpspec/phpspec": "^2.2", - "phpunit/phpunit": "~4.8" - }, - "suggest": { - "ext-fileinfo": "Required for MimeType", - "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", - "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", - "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", - "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", - "league/flysystem-copy": "Allows you to use Copy.com storage", - "league/flysystem-dropbox": "Allows you to use Dropbox storage", - "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem", - "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", - "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib", - "league/flysystem-webdav": "Allows you to use WebDAV storage", - "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter" + "friendsofphp/php-cs-fixer": "~2", + "phpunit/phpunit": "~4.0 || ~5.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "1.23-dev" } }, "autoload": { "psr-4": { - "League\\Flysystem\\": "src/" + "Carbon\\": "src/Carbon/" } }, "notification-url": "https://packagist.org/downloads/", @@ -848,88 +691,46 @@ ], "authors": [ { - "name": "Frank de Jonge", - "email": "info@frenky.net" + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "http://nesbot.com" } ], - "description": "Filesystem abstraction: Many filesystems, one API.", + "description": "A simple API extension for DateTime.", + "homepage": "http://carbon.nesbot.com", "keywords": [ - "Cloud Files", - "WebDAV", - "abstraction", - "aws", - "cloud", - "copy.com", - "dropbox", - "file systems", - "files", - "filesystem", - "filesystems", - "ftp", - "rackspace", - "remote", - "s3", - "sftp", - "storage" - ], - "time": "2016-08-10 08:55:11" + "date", + "datetime", + "time" + ], + "time": "2017-01-16T07:55:07+00:00" }, { - "name": "monolog/monolog", - "version": "1.21.0", + "name": "psr/container", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/Seldaek/monolog.git", - "reference": "f42fbdfd53e306bda545845e4dbfd3e72edb4952" + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f42fbdfd53e306bda545845e4dbfd3e72edb4952", - "reference": "f42fbdfd53e306bda545845e4dbfd3e72edb4952", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", "shasum": "" }, "require": { - "php": ">=5.3.0", - "psr/log": "~1.0" - }, - "provide": { - "psr/log-implementation": "1.0.0" - }, - "require-dev": { - "aws/aws-sdk-php": "^2.4.9", - "doctrine/couchdb": "~1.0@dev", - "graylog2/gelf-php": "~1.0", - "jakub-onderka/php-parallel-lint": "0.9", - "php-amqplib/php-amqplib": "~2.4", - "php-console/php-console": "^3.1.3", - "phpunit/phpunit": "~4.5", - "phpunit/phpunit-mock-objects": "2.3.0", - "ruflin/elastica": ">=0.90 <3.0", - "sentry/sentry": "^0.13", - "swiftmailer/swiftmailer": "~5.3" - }, - "suggest": { - "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", - "doctrine/couchdb": "Allow sending log messages to a CouchDB server", - "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", - "ext-mongo": "Allow sending log messages to a MongoDB server", - "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", - "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", - "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", - "php-console/php-console": "Allow sending log messages to Google Chrome", - "rollbar/rollbar": "Allow sending log messages to Rollbar", - "ruflin/elastica": "Allow sending log messages to an Elastic Search server", - "sentry/sentry": "Allow sending log messages to a Sentry server" + "php": ">=5.3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { - "Monolog\\": "src/Monolog" + "Psr\\Container\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -938,44 +739,47 @@ ], "authors": [ { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "Sends your logs to files, sockets, inboxes, databases and various web services", - "homepage": "http://github.com/Seldaek/monolog", + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", "keywords": [ - "log", - "logging", - "psr-3" + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" ], - "time": "2016-07-29 03:23:52" + "time": "2017-02-14T16:28:37+00:00" }, { - "name": "mtdowling/cron-expression", - "version": "v1.1.0", + "name": "psr/http-message", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/mtdowling/cron-expression.git", - "reference": "c9ee7886f5a12902b225a1a12f36bb45f9ab89e5" + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mtdowling/cron-expression/zipball/c9ee7886f5a12902b225a1a12f36bb45f9ab89e5", - "reference": "c9ee7886f5a12902b225a1a12f36bb45f9ab89e5", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", "shasum": "" }, "require": { - "php": ">=5.3.2" - }, - "require-dev": { - "phpunit/phpunit": "~4.0|~5.0" + "php": ">=5.3.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, "autoload": { - "psr-0": { - "Cron": "src/" + "psr-4": { + "Psr\\Http\\Message\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -984,43 +788,48 @@ ], "authors": [ { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", "keywords": [ - "cron", - "schedule" + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" ], - "time": "2016-01-26 21:23:30" + "time": "2016-08-06T14:39:51+00:00" }, { - "name": "nesbot/carbon", - "version": "1.21.0", + "name": "psr/log", + "version": "1.0.2", "source": { "type": "git", - "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "7b08ec6f75791e130012f206e3f7b0e76e18e3d7" + "url": "https://github.com/php-fig/log.git", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/7b08ec6f75791e130012f206e3f7b0e76e18e3d7", - "reference": "7b08ec6f75791e130012f206e3f7b0e76e18e3d7", + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", "shasum": "" }, "require": { - "php": ">=5.3.0", - "symfony/translation": "~2.6|~3.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.0|~5.0" + "php": ">=5.3.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, "autoload": { "psr-4": { - "Carbon\\": "src/Carbon/" + "Psr\\Log\\": "Psr/Log/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1029,99 +838,95 @@ ], "authors": [ { - "name": "Brian Nesbitt", - "email": "brian@nesbot.com", - "homepage": "http://nesbot.com" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "A simple API extension for DateTime.", - "homepage": "http://carbon.nesbot.com", + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", "keywords": [ - "date", - "datetime", - "time" + "log", + "psr", + "psr-3" ], - "time": "2015-11-04 20:07:17" + "time": "2016-10-10T12:19:37+00:00" }, { - "name": "nikic/php-parser", - "version": "v2.1.1", + "name": "psr/simple-cache", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "4dd659edadffdc2143e4753df655d866dbfeedf0" + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "753fa598e8f3b9966c886fe13f370baa45ef0e24" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4dd659edadffdc2143e4753df655d866dbfeedf0", - "reference": "4dd659edadffdc2143e4753df655d866dbfeedf0", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/753fa598e8f3b9966c886fe13f370baa45ef0e24", + "reference": "753fa598e8f3b9966c886fe13f370baa45ef0e24", "shasum": "" }, "require": { - "ext-tokenizer": "*", - "php": ">=5.4" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" + "php": ">=5.3.0" }, - "bin": [ - "bin/php-parse" - ], "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { - "PhpParser\\": "lib/PhpParser" + "Psr\\SimpleCache\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Nikita Popov" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "A PHP parser written in PHP", + "description": "Common interfaces for simple caching", "keywords": [ - "parser", - "php" + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" ], - "time": "2016-09-16 12:04:44" + "time": "2017-01-02T13:31:39+00:00" }, { - "name": "paragonie/random_compat", - "version": "v2.0.2", + "name": "ratchet/rfc6455", + "version": "v0.2.3", "source": { "type": "git", - "url": "https://github.com/paragonie/random_compat.git", - "reference": "088c04e2f261c33bed6ca5245491cfca69195ccf" + "url": "https://github.com/ratchetphp/RFC6455.git", + "reference": "cc8a1a46a703ce01de10fdb5fab387381b66edc8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/088c04e2f261c33bed6ca5245491cfca69195ccf", - "reference": "088c04e2f261c33bed6ca5245491cfca69195ccf", + "url": "https://api.github.com/repos/ratchetphp/RFC6455/zipball/cc8a1a46a703ce01de10fdb5fab387381b66edc8", + "reference": "cc8a1a46a703ce01de10fdb5fab387381b66edc8", "shasum": "" }, "require": { - "php": ">=5.2.0" + "guzzlehttp/psr7": "^1.0", + "php": ">=5.4.2" }, "require-dev": { - "phpunit/phpunit": "4.*|5.*" - }, - "suggest": { - "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + "phpunit/phpunit": "4.8.*", + "react/http": "^0.4.1", + "react/socket-client": "^0.4.3" }, "type": "library", "autoload": { - "files": [ - "lib/random.php" - ] + "psr-4": { + "Ratchet\\RFC6455\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1129,189 +934,170 @@ ], "authors": [ { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com" + "name": "Chris Boden", + "email": "cboden@gmail.com", + "role": "Developer" } ], - "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", + "description": "RFC6455 WebSocket protocol handler", + "homepage": "http://socketo.me", "keywords": [ - "csprng", - "pseudorandom", - "random" + "WebSockets", + "rfc6455", + "websocket" ], - "time": "2016-04-03 06:00:07" + "time": "2017-09-13T13:49:42+00:00" }, { - "name": "psr/log", - "version": "1.0.1", + "name": "react/cache", + "version": "v0.4.1", "source": { "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "5277094ed527a1c4477177d102fe4c53551953e0" + "url": "https://github.com/reactphp/cache.git", + "reference": "558f614891341b1d817a8cdf9a358948ec49638f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/5277094ed527a1c4477177d102fe4c53551953e0", - "reference": "5277094ed527a1c4477177d102fe4c53551953e0", + "url": "https://api.github.com/repos/reactphp/cache/zipball/558f614891341b1d817a8cdf9a358948ec49638f", + "reference": "558f614891341b1d817a8cdf9a358948ec49638f", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=5.3.0", + "react/promise": "~2.0|~1.1" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, "autoload": { "psr-4": { - "Psr\\Log\\": "Psr/Log/" + "React\\Cache\\": "src\\" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", + "description": "Async caching.", "keywords": [ - "log", - "psr", - "psr-3" + "cache" ], - "time": "2016-09-19 16:02:08" + "time": "2016-02-25T18:17:16+00:00" }, { - "name": "psy/psysh", - "version": "v0.7.2", + "name": "react/dns", + "version": "v0.4.11", "source": { "type": "git", - "url": "https://github.com/bobthecow/psysh.git", - "reference": "e64e10b20f8d229cac76399e1f3edddb57a0f280" + "url": "https://github.com/reactphp/dns.git", + "reference": "8558bba4f2784aa997670d15fc6f7461a8eb4e53" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/e64e10b20f8d229cac76399e1f3edddb57a0f280", - "reference": "e64e10b20f8d229cac76399e1f3edddb57a0f280", + "url": "https://api.github.com/repos/reactphp/dns/zipball/8558bba4f2784aa997670d15fc6f7461a8eb4e53", + "reference": "8558bba4f2784aa997670d15fc6f7461a8eb4e53", "shasum": "" }, "require": { - "dnoegel/php-xdg-base-dir": "0.1", - "jakub-onderka/php-console-highlighter": "0.3.*", - "nikic/php-parser": "^1.2.1|~2.0", - "php": ">=5.3.9", - "symfony/console": "~2.3.10|^2.4.2|~3.0", - "symfony/var-dumper": "~2.7|~3.0" + "php": ">=5.3.0", + "react/cache": "~0.4.0|~0.3.0", + "react/event-loop": "^1.0 || ^0.5 || ^0.4 || ^0.3.5", + "react/promise": "^2.1 || ^1.2.1", + "react/promise-timer": "^1.2", + "react/socket": "^1.0 || ^0.8 || ^0.7 || ^0.6 || ^0.5 || ^0.4.4", + "react/stream": "^1.0 || ^0.7 || ^0.6 || ^0.5 || ^0.4.5" }, "require-dev": { - "fabpot/php-cs-fixer": "~1.5", - "phpunit/phpunit": "~3.7|~4.0|~5.0", - "squizlabs/php_codesniffer": "~2.0", - "symfony/finder": "~2.1|~3.0" - }, - "suggest": { - "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", - "ext-pdo-sqlite": "The doc command requires SQLite to work.", - "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", - "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history." + "clue/block-react": "^1.2", + "phpunit/phpunit": "^5.0 || ^4.8.10" }, - "bin": [ - "bin/psysh" - ], "type": "library", - "extra": { - "branch-alias": { - "dev-develop": "0.8.x-dev" - } - }, "autoload": { - "files": [ - "src/Psy/functions.php" - ], "psr-4": { - "Psy\\": "src/Psy/" + "React\\Dns\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "Justin Hileman", - "email": "justin@justinhileman.info", - "homepage": "http://justinhileman.com" - } - ], - "description": "An interactive shell for modern PHP.", - "homepage": "http://psysh.org", + "description": "Async DNS resolver for ReactPHP", "keywords": [ - "REPL", - "console", - "interactive", - "shell" + "async", + "dns", + "dns-resolver", + "reactphp" ], - "time": "2016-03-09 05:03:14" + "time": "2017-08-25T08:22:48+00:00" }, { - "name": "ramsey/uuid", - "version": "3.5.1", + "name": "react/event-loop", + "version": "v0.4.3", "source": { "type": "git", - "url": "https://github.com/ramsey/uuid.git", - "reference": "a07797b986671b0dc823885a81d5e3516b931599" + "url": "https://github.com/reactphp/event-loop.git", + "reference": "8bde03488ee897dc6bb3d91e4e17c353f9c5252f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/a07797b986671b0dc823885a81d5e3516b931599", - "reference": "a07797b986671b0dc823885a81d5e3516b931599", + "url": "https://api.github.com/repos/reactphp/event-loop/zipball/8bde03488ee897dc6bb3d91e4e17c353f9c5252f", + "reference": "8bde03488ee897dc6bb3d91e4e17c353f9c5252f", "shasum": "" }, "require": { - "paragonie/random_compat": "^1.0|^2.0", - "php": ">=5.4" - }, - "replace": { - "rhumsaa/uuid": "self.version" + "php": ">=5.4.0" }, "require-dev": { - "apigen/apigen": "^4.1", - "codeception/aspect-mock": "1.0.0", - "goaop/framework": "1.0.0-alpha.2", - "ircmaxell/random-lib": "^1.1", - "jakub-onderka/php-parallel-lint": "^0.9.0", - "mockery/mockery": "^0.9.4", - "moontoast/math": "^1.1", - "phpunit/phpunit": "^4.7|>=5.0 <5.4", - "satooshi/php-coveralls": "^0.6.1", - "squizlabs/php_codesniffer": "^2.3" + "phpunit/phpunit": "~4.8" }, "suggest": { - "ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator", - "ext-uuid": "Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator", - "ircmaxell/random-lib": "Provides RandomLib for use with the RandomLibAdapter", - "moontoast/math": "Provides support for converting UUID to 128-bit integer (in string form).", - "ramsey/uuid-console": "A console application for generating UUIDs with ramsey/uuid", - "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + "ext-event": "~1.0", + "ext-libev": "*", + "ext-libevent": ">=0.1.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" + "autoload": { + "psr-4": { + "React\\EventLoop\\": "src" } }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Event loop abstraction layer that libraries can use for evented I/O.", + "keywords": [ + "asynchronous", + "event-loop" + ], + "time": "2017-04-27T10:56:23+00:00" + }, + { + "name": "react/promise", + "version": "v2.5.1", + "source": { + "type": "git", + "url": "https://github.com/reactphp/promise.git", + "reference": "62785ae604c8d69725d693eb370e1d67e94c4053" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/promise/zipball/62785ae604c8d69725d693eb370e1d67e94c4053", + "reference": "62785ae604c8d69725d693eb370e1d67e94c4053", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.8" + }, + "type": "library", "autoload": { "psr-4": { - "Ramsey\\Uuid\\": "src/" - } + "React\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1319,98 +1105,98 @@ ], "authors": [ { - "name": "Marijn Huizendveld", - "email": "marijn.huizendveld@gmail.com" - }, - { - "name": "Thibaud Fabre", - "email": "thibaud@aztech.io" - }, - { - "name": "Ben Ramsey", - "email": "ben@benramsey.com", - "homepage": "https://benramsey.com" + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com" } ], - "description": "Formerly rhumsaa/uuid. A PHP 5.4+ library for generating RFC 4122 version 1, 3, 4, and 5 universally unique identifiers (UUID).", - "homepage": "https://github.com/ramsey/uuid", + "description": "A lightweight implementation of CommonJS Promises/A for PHP", "keywords": [ - "guid", - "identifier", - "uuid" + "promise", + "promises" ], - "time": "2016-10-02 15:51:17" + "time": "2017-03-25T12:08:31+00:00" }, { - "name": "react/event-loop", - "version": "v0.4.2", + "name": "react/promise-timer", + "version": "v1.2.0", "source": { "type": "git", - "url": "https://github.com/reactphp/event-loop.git", - "reference": "164799f73175e1c80bba92a220ea35df6ca371dd" + "url": "https://github.com/reactphp/promise-timer.git", + "reference": "3bc527fbd1201a193ab41c19b9a770d71a3514af" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/event-loop/zipball/164799f73175e1c80bba92a220ea35df6ca371dd", - "reference": "164799f73175e1c80bba92a220ea35df6ca371dd", + "url": "https://api.github.com/repos/reactphp/promise-timer/zipball/3bc527fbd1201a193ab41c19b9a770d71a3514af", + "reference": "3bc527fbd1201a193ab41c19b9a770d71a3514af", "shasum": "" }, "require": { - "php": ">=5.4.0" + "php": ">=5.3", + "react/event-loop": "^1.0 || ^0.5 || ^0.4 || ^0.3.5", + "react/promise": "~2.1|~1.2" }, - "suggest": { - "ext-event": "~1.0", - "ext-libev": "*", - "ext-libevent": ">=0.1.0" + "require-dev": { + "phpunit/phpunit": "^5.0 || ^4.8" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.5-dev" - } - }, "autoload": { "psr-4": { - "React\\EventLoop\\": "src" - } + "React\\Promise\\Timer\\": "src/" + }, + "files": [ + "src/functions.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "Event loop abstraction layer that libraries can use for evented I/O.", - "keywords": [ - "asynchronous", - "event-loop" + "authors": [ + { + "name": "Christian Lück", + "email": "christian@lueck.tv" + } ], - "time": "2016-03-08 02:09:32" + "description": "Trivial timeout implementation for Promises", + "homepage": "https://github.com/react/promise-timer", + "keywords": [ + "async", + "event-loop", + "promise", + "reactphp", + "timeout", + "timer" + ], + "time": "2017-08-08T16:30:19+00:00" }, { "name": "react/socket", - "version": "v0.4.3", + "version": "v0.8.5", "source": { "type": "git", "url": "https://github.com/reactphp/socket.git", - "reference": "ce015ec5879b96f5d30905f035f223aa85013fcc" + "reference": "d169d1ed24e39bf182781d72ddd224dbbd449aa8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/socket/zipball/ce015ec5879b96f5d30905f035f223aa85013fcc", - "reference": "ce015ec5879b96f5d30905f035f223aa85013fcc", + "url": "https://api.github.com/repos/reactphp/socket/zipball/d169d1ed24e39bf182781d72ddd224dbbd449aa8", + "reference": "d169d1ed24e39bf182781d72ddd224dbbd449aa8", "shasum": "" }, "require": { - "evenement/evenement": "~2.0|~1.0", + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", "php": ">=5.3.0", - "react/event-loop": "0.4.*|0.3.*", - "react/stream": "0.4.*|0.3.*" + "react/dns": "^0.4.11", + "react/event-loop": "^1.0 || ^0.5 || ^0.4 || ^0.3.5", + "react/promise": "^2.1 || ^1.2", + "react/promise-timer": "~1.0", + "react/stream": "^1.0 || ^0.7.1" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.4-dev" - } + "require-dev": { + "clue/block-react": "^1.2", + "phpunit/phpunit": "^5.0 || ^4.8" }, + "type": "library", "autoload": { "psr-4": { "React\\Socket\\": "src" @@ -1420,38 +1206,41 @@ "license": [ "MIT" ], - "description": "Library for building an evented socket server.", + "description": "Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP", "keywords": [ - "Socket" + "Connection", + "Socket", + "async", + "reactphp", + "stream" ], - "time": "2016-03-01 20:10:35" + "time": "2017-10-23T21:45:58+00:00" }, { "name": "react/stream", - "version": "v0.4.4", + "version": "v0.7.4", "source": { "type": "git", "url": "https://github.com/reactphp/stream.git", - "reference": "fcc9e7cea126962cff303c90c05e2efdcec09a27" + "reference": "5c7db5261b3cc7e11b8ba765bed8ba31ee745f5c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/stream/zipball/fcc9e7cea126962cff303c90c05e2efdcec09a27", - "reference": "fcc9e7cea126962cff303c90c05e2efdcec09a27", + "url": "https://api.github.com/repos/reactphp/stream/zipball/5c7db5261b3cc7e11b8ba765bed8ba31ee745f5c", + "reference": "5c7db5261b3cc7e11b8ba765bed8ba31ee745f5c", "shasum": "" }, "require": { - "evenement/evenement": "^2.0|^1.0", - "php": ">=5.3.8" + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "php": ">=5.3.8", + "react/event-loop": "^1.0 || ^0.5 || ^0.4 || ^0.3" }, "require-dev": { "clue/stream-filter": "~1.2", - "react/event-loop": "^0.4|^0.3", - "react/promise": "^2.0|^1.0" + "phpunit/phpunit": "^5.0 || ^4.8.10" }, "suggest": { - "react/event-loop": "^0.4", - "react/promise": "^2.0" + "react/event-loop": "^0.4" }, "type": "library", "autoload": { @@ -1463,12 +1252,18 @@ "license": [ "MIT" ], - "description": "Basic readable and writable stream interfaces that support piping.", + "description": "Event-driven readable and writable streams for non-blocking I/O in ReactPHP", "keywords": [ + "event-driven", + "io", + "non-blocking", "pipe", - "stream" + "reactphp", + "readable", + "stream", + "writable" ], - "time": "2016-08-22 09:51:07" + "time": "2017-10-11T17:58:46+00:00" }, { "name": "react/zmq", @@ -1513,93 +1308,48 @@ "zeromq", "zmq" ], - "time": "2014-05-25 17:54:51" - }, - { - "name": "swiftmailer/swiftmailer", - "version": "v5.4.3", - "source": { - "type": "git", - "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "4cc92842069c2bbc1f28daaaf1d2576ec4dfe153" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/4cc92842069c2bbc1f28daaaf1d2576ec4dfe153", - "reference": "4cc92842069c2bbc1f28daaaf1d2576ec4dfe153", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "mockery/mockery": "~0.9.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.4-dev" - } - }, - "autoload": { - "files": [ - "lib/swift_required.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Chris Corbyn" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Swiftmailer, free feature-rich PHP mailer", - "homepage": "http://swiftmailer.org", - "keywords": [ - "email", - "mail", - "mailer" - ], - "time": "2016-07-08 11:51:25" + "time": "2014-05-25T17:54:51+00:00" }, { "name": "symfony/console", - "version": "v3.1.4", + "version": "v3.3.11", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "8ea494c34f0f772c3954b5fbe00bffc5a435e563" + "reference": "fd684d68f83568d8293564b4971928a2c4bdfc5c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/8ea494c34f0f772c3954b5fbe00bffc5a435e563", - "reference": "8ea494c34f0f772c3954b5fbe00bffc5a435e563", + "url": "https://api.github.com/repos/symfony/console/zipball/fd684d68f83568d8293564b4971928a2c4bdfc5c", + "reference": "fd684d68f83568d8293564b4971928a2c4bdfc5c", "shasum": "" }, "require": { - "php": ">=5.5.9", + "php": "^5.5.9|>=7.0.8", + "symfony/debug": "~2.8|~3.0", "symfony/polyfill-mbstring": "~1.0" }, + "conflict": { + "symfony/dependency-injection": "<3.3" + }, "require-dev": { "psr/log": "~1.0", + "symfony/config": "~3.3", + "symfony/dependency-injection": "~3.3", "symfony/event-dispatcher": "~2.8|~3.0", + "symfony/filesystem": "~2.8|~3.0", "symfony/process": "~2.8|~3.0" }, "suggest": { "psr/log": "For using the console logger", "symfony/event-dispatcher": "", + "symfony/filesystem": "", "symfony/process": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -1626,37 +1376,36 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2016-08-19 06:48:39" + "time": "2017-11-07T14:16:22+00:00" }, { "name": "symfony/debug", - "version": "v3.1.4", + "version": "v3.3.11", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "34f6ac18c2974ca5fce68adf419ee7d15def6f11" + "reference": "74557880e2846b5c84029faa96b834da37e29810" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/34f6ac18c2974ca5fce68adf419ee7d15def6f11", - "reference": "34f6ac18c2974ca5fce68adf419ee7d15def6f11", + "url": "https://api.github.com/repos/symfony/debug/zipball/74557880e2846b5c84029faa96b834da37e29810", + "reference": "74557880e2846b5c84029faa96b834da37e29810", "shasum": "" }, "require": { - "php": ">=5.5.9", + "php": "^5.5.9|>=7.0.8", "psr/log": "~1.0" }, "conflict": { "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" }, "require-dev": { - "symfony/class-loader": "~2.8|~3.0", "symfony/http-kernel": "~2.8|~3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -1683,29 +1432,32 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2016-08-23 13:39:15" + "time": "2017-11-10T16:38:39+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v3.1.4", + "version": "v3.3.11", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "c0c00c80b3a69132c4e55c3e7db32b4a387615e5" + "reference": "271d8c27c3ec5ecee6e2ac06016232e249d638d9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/c0c00c80b3a69132c4e55c3e7db32b4a387615e5", - "reference": "c0c00c80b3a69132c4e55c3e7db32b4a387615e5", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/271d8c27c3ec5ecee6e2ac06016232e249d638d9", + "reference": "271d8c27c3ec5ecee6e2ac06016232e249d638d9", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^5.5.9|>=7.0.8" + }, + "conflict": { + "symfony/dependency-injection": "<3.3" }, "require-dev": { "psr/log": "~1.0", "symfony/config": "~2.8|~3.0", - "symfony/dependency-injection": "~2.8|~3.0", + "symfony/dependency-injection": "~3.3", "symfony/expression-language": "~2.8|~3.0", "symfony/stopwatch": "~2.8|~3.0" }, @@ -1716,7 +1468,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -1743,29 +1495,29 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2016-07-19 10:45:57" + "time": "2017-11-05T15:47:03+00:00" }, { "name": "symfony/finder", - "version": "v3.1.4", + "version": "v3.3.11", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "e568ef1784f447a0e54dcb6f6de30b9747b0f577" + "reference": "138af5ec075d4b1d1bd19de08c38a34bb2d7d880" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/e568ef1784f447a0e54dcb6f6de30b9747b0f577", - "reference": "e568ef1784f447a0e54dcb6f6de30b9747b0f577", + "url": "https://api.github.com/repos/symfony/finder/zipball/138af5ec075d4b1d1bd19de08c38a34bb2d7d880", + "reference": "138af5ec075d4b1d1bd19de08c38a34bb2d7d880", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^5.5.9|>=7.0.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -1792,24 +1544,24 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2016-08-26 12:04:02" + "time": "2017-11-05T15:47:03+00:00" }, { "name": "symfony/http-foundation", - "version": "v3.1.4", + "version": "v3.3.11", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "63592e00fd90632b57ee50220a1ddb29b6bf3bb4" + "reference": "873ccdf8c1cae20da0184862820c434e20fdc8ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/63592e00fd90632b57ee50220a1ddb29b6bf3bb4", - "reference": "63592e00fd90632b57ee50220a1ddb29b6bf3bb4", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/873ccdf8c1cae20da0184862820c434e20fdc8ce", + "reference": "873ccdf8c1cae20da0184862820c434e20fdc8ce", "shasum": "" }, "require": { - "php": ">=5.5.9", + "php": "^5.5.9|>=7.0.8", "symfony/polyfill-mbstring": "~1.1" }, "require-dev": { @@ -1818,7 +1570,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -1845,39 +1597,43 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2016-08-22 12:11:19" + "time": "2017-11-05T19:07:00+00:00" }, { "name": "symfony/http-kernel", - "version": "v3.1.4", + "version": "v3.3.11", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "aeda215d6b01f119508c090d2a09ebb5b0bc61f3" + "reference": "f38c96b8d88a37b4f6bc8ae46a48b018d4894dd0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/aeda215d6b01f119508c090d2a09ebb5b0bc61f3", - "reference": "aeda215d6b01f119508c090d2a09ebb5b0bc61f3", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/f38c96b8d88a37b4f6bc8ae46a48b018d4894dd0", + "reference": "f38c96b8d88a37b4f6bc8ae46a48b018d4894dd0", "shasum": "" }, "require": { - "php": ">=5.5.9", + "php": "^5.5.9|>=7.0.8", "psr/log": "~1.0", "symfony/debug": "~2.8|~3.0", "symfony/event-dispatcher": "~2.8|~3.0", - "symfony/http-foundation": "~2.8.8|~3.0.8|~3.1.2|~3.2" + "symfony/http-foundation": "^3.3.11" }, "conflict": { - "symfony/config": "<2.8" + "symfony/config": "<2.8", + "symfony/dependency-injection": "<3.3", + "symfony/var-dumper": "<3.3", + "twig/twig": "<1.34|<2.4,>=2" }, "require-dev": { + "psr/cache": "~1.0", "symfony/browser-kit": "~2.8|~3.0", "symfony/class-loader": "~2.8|~3.0", "symfony/config": "~2.8|~3.0", "symfony/console": "~2.8|~3.0", "symfony/css-selector": "~2.8|~3.0", - "symfony/dependency-injection": "~2.8|~3.0", + "symfony/dependency-injection": "~3.3", "symfony/dom-crawler": "~2.8|~3.0", "symfony/expression-language": "~2.8|~3.0", "symfony/finder": "~2.8|~3.0", @@ -1886,7 +1642,7 @@ "symfony/stopwatch": "~2.8|~3.0", "symfony/templating": "~2.8|~3.0", "symfony/translation": "~2.8|~3.0", - "symfony/var-dumper": "~2.8|~3.0" + "symfony/var-dumper": "~3.3" }, "suggest": { "symfony/browser-kit": "", @@ -1900,7 +1656,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -1927,20 +1683,20 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2016-09-03 15:28:24" + "time": "2017-11-10T20:08:13+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.2.0", + "version": "v1.6.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "dff51f72b0706335131b00a7f49606168c582594" + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/dff51f72b0706335131b00a7f49606168c582594", - "reference": "dff51f72b0706335131b00a7f49606168c582594", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", "shasum": "" }, "require": { @@ -1952,7 +1708,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2-dev" + "dev-master": "1.6-dev" } }, "autoload": { @@ -1986,193 +1742,39 @@ "portable", "shim" ], - "time": "2016-05-18 14:26:46" - }, - { - "name": "symfony/polyfill-php56", - "version": "v1.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php56.git", - "reference": "3edf57a8fbf9a927533344cef65ad7e1cf31030a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/3edf57a8fbf9a927533344cef65ad7e1cf31030a", - "reference": "3edf57a8fbf9a927533344cef65ad7e1cf31030a", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "symfony/polyfill-util": "~1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php56\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "time": "2016-05-18 14:26:46" - }, - { - "name": "symfony/polyfill-util", - "version": "v1.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-util.git", - "reference": "ef830ce3d218e622b221d6bfad42c751d974bf99" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/ef830ce3d218e622b221d6bfad42c751d974bf99", - "reference": "ef830ce3d218e622b221d6bfad42c751d974bf99", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Util\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony utilities for portability of PHP codes", - "homepage": "https://symfony.com", - "keywords": [ - "compat", - "compatibility", - "polyfill", - "shim" - ], - "time": "2016-05-18 14:26:46" - }, - { - "name": "symfony/process", - "version": "v3.1.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "e64e93041c80e77197ace5ab9385dedb5a143697" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/e64e93041c80e77197ace5ab9385dedb5a143697", - "reference": "e64e93041c80e77197ace5ab9385dedb5a143697", - "shasum": "" - }, - "require": { - "php": ">=5.5.9" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Process\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Process Component", - "homepage": "https://symfony.com", - "time": "2016-08-16 14:58:24" + "time": "2017-10-11T12:05:26+00:00" }, { "name": "symfony/routing", - "version": "v3.1.4", + "version": "v3.3.11", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "8edf62498a1a4c57ba317664a4b698339c10cdf6" + "reference": "cf7fa1dfcfee2c96969bfa1c0341e5627ecb1e95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/8edf62498a1a4c57ba317664a4b698339c10cdf6", - "reference": "8edf62498a1a4c57ba317664a4b698339c10cdf6", + "url": "https://api.github.com/repos/symfony/routing/zipball/cf7fa1dfcfee2c96969bfa1c0341e5627ecb1e95", + "reference": "cf7fa1dfcfee2c96969bfa1c0341e5627ecb1e95", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^5.5.9|>=7.0.8" }, "conflict": { - "symfony/config": "<2.8" + "symfony/config": "<2.8", + "symfony/dependency-injection": "<3.3", + "symfony/yaml": "<3.3" }, "require-dev": { "doctrine/annotations": "~1.0", "doctrine/common": "~2.2", "psr/log": "~1.0", "symfony/config": "~2.8|~3.0", + "symfony/dependency-injection": "~3.3", "symfony/expression-language": "~2.8|~3.0", "symfony/http-foundation": "~2.8|~3.0", - "symfony/yaml": "~2.8|~3.0" + "symfony/yaml": "~3.3" }, "suggest": { "doctrine/annotations": "For using the annotation loader", @@ -2185,7 +1787,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -2218,34 +1820,35 @@ "uri", "url" ], - "time": "2016-08-16 14:58:24" + "time": "2017-11-07T14:16:22+00:00" }, { "name": "symfony/translation", - "version": "v3.1.4", + "version": "v3.3.11", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "a35edc277513c9bc0f063ca174c36b346f974528" + "reference": "373e553477e55cd08f8b86b74db766c75b987fdb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/a35edc277513c9bc0f063ca174c36b346f974528", - "reference": "a35edc277513c9bc0f063ca174c36b346f974528", + "url": "https://api.github.com/repos/symfony/translation/zipball/373e553477e55cd08f8b86b74db766c75b987fdb", + "reference": "373e553477e55cd08f8b86b74db766c75b987fdb", "shasum": "" }, "require": { - "php": ">=5.5.9", + "php": "^5.5.9|>=7.0.8", "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/config": "<2.8" + "symfony/config": "<2.8", + "symfony/yaml": "<3.3" }, "require-dev": { "psr/log": "~1.0", "symfony/config": "~2.8|~3.0", - "symfony/intl": "~2.8|~3.0", - "symfony/yaml": "~2.8|~3.0" + "symfony/intl": "^2.8.18|^3.2.5", + "symfony/yaml": "~3.3" }, "suggest": { "psr/log": "To use logging capability in translator", @@ -2255,7 +1858,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -2282,120 +1885,7 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2016-08-05 08:37:39" - }, - { - "name": "symfony/var-dumper", - "version": "v3.1.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/var-dumper.git", - "reference": "62ee73706c421654a4c840028954510277f7dfc8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/62ee73706c421654a4c840028954510277f7dfc8", - "reference": "62ee73706c421654a4c840028954510277f7dfc8", - "shasum": "" - }, - "require": { - "php": ">=5.5.9", - "symfony/polyfill-mbstring": "~1.0" - }, - "require-dev": { - "twig/twig": "~1.20|~2.0" - }, - "suggest": { - "ext-symfony_debug": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, - "autoload": { - "files": [ - "Resources/functions/dump.php" - ], - "psr-4": { - "Symfony\\Component\\VarDumper\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony mechanism for exploring and dumping PHP variables", - "homepage": "https://symfony.com", - "keywords": [ - "debug", - "dump" - ], - "time": "2016-08-31 09:05:42" - }, - { - "name": "vlucas/phpdotenv", - "version": "v2.4.0", - "source": { - "type": "git", - "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "3cc116adbe4b11be5ec557bf1d24dc5e3a21d18c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/3cc116adbe4b11be5ec557bf1d24dc5e3a21d18c", - "reference": "3cc116adbe4b11be5ec557bf1d24dc5e3a21d18c", - "shasum": "" - }, - "require": { - "php": ">=5.3.9" - }, - "require-dev": { - "phpunit/phpunit": "^4.8 || ^5.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "psr-4": { - "Dotenv\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause-Attribution" - ], - "authors": [ - { - "name": "Vance Lucas", - "email": "vance@vancelucas.com", - "homepage": "http://www.vancelucas.com" - } - ], - "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", - "keywords": [ - "dotenv", - "env", - "environment" - ], - "time": "2016-09-01 10:05:43" + "time": "2017-11-07T14:12:55+00:00" } ], "packages-dev": [], @@ -2405,7 +1895,8 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": ">=5.5.9" + "php": ">=7.1.0", + "ext-zmq": "*" }, "platform-dev": [] } From 37e3fccca726eeda9aa5a18f471762f9e065e879 Mon Sep 17 00:00:00 2001 From: Simon Hamp Date: Mon, 13 Nov 2017 19:33:31 +0000 Subject: [PATCH 15/16] Simplify readme --- README.md | 28 +++++++--------------------- 1 file changed, 7 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index bcb5ba4..15d5b6f 100644 --- a/README.md +++ b/README.md @@ -2,11 +2,12 @@ **This is an updated fork of [Laravel Ratchet](https://github.com/Askedio/laravel-ratchet), built specifically to work with this [custom fork](https://github.com/simonhamp/echo) of Laravel Echo.** -This fork enables you to create and run a fully functioning WebSocket server in your Laravel app that works with Laravel's built-in [broadcasting](https://laravel.com/docs/5.5/broadcasting). +This fork enables you to create and run a fully functioning WebSocket server in your Laravel app that can receive messages from ZeroMQ. ## Requirements - PHP 7.1 +- Laravel 5.5 - ZeroMQ - ext-zmq for PHP @@ -22,21 +23,16 @@ Because this is a custom fork and it relies on another custom package (and becau { "type": "git", "url": "git@github.com:simonhamp/laravel-ratchet.git" - }, - { - "type": "git", - "url": "git@github.com:simonhamp/laravel-zmq.git" } ] ``` -The service providers are loaded automatically in Laravel 5.5 using Package Autodiscovery. +The service provider is loaded automatically in Laravel 5.5 using Package Autodiscovery. You **MUST** publish the vendor files so you can configure your server defaults. ```bash $ php artisan vendor:publish --provider=LaravelRatchetServiceProvider -$ php artisan vendor:publish --provider=ZmqServiceProvider ``` ## Starting the Server @@ -65,26 +61,16 @@ You can do this simply by passing the `-z` option, i.e.: $ php artisan ratchet:serve --driver=WsServer -z ``` -This will connect to the socket you define in your `config/ratchet.php` settings. **You MUST set the `ratchet.zmq.method` option to `\ZMQ::SOCKET_PULL` to work with broadcasting.** - -Set `BROADCASTING_DRIVER=zmq` in your `.env` and add the following ZeroMQ connection settings to your `config/broadcasting.php`: +This will connect to the socket you define in your `config/ratchet.php` settings. -```php -'connections' => [ - 'zmq' => [ - 'driver' => 'zmq', - ], -] -``` +**You MUST set the `ratchet.zmq.method` option to `\ZMQ::SOCKET_PULL` to work with broadcasting.** -And update the `config/zmq.php` with the same socket details, except **set `zmq.connections.publish.method` to `\ZMQ::SOCKET_PUSH`**. +Be sure to install [my fork of `laravel-zmq`](https://github.com/simonhamp/laravel-zmq) to go along with this package. -This will use ZeroMQ as the back-channel to broadcast your events from your Laravel application to the Ratchet WebSocket server. +This will allow you to use ZeroMQ as the back-channel to broadcast your events from your Laravel application to your Ratchet WebSocket server. For your web clients to subscribe to channels through Ratchet, you will need to install [this custom fork of Laravel Echo](https://github.com/simonhamp/echo). ## Acknowledgements This package would not be possible without the initial [awesome work](https://github.com/Askedio/laravel-ratchet) of [@gcphost](https://github.com/gcphost) of [Asked.io](https://medium.com/asked-io). - -Also, thanks to [@pelim](https://github.com/pelim) for creating his original [ZeroMQ broadcasting driver](https://github.com/pelim/laravel-zmq) for Laravel. From df1be8cca4cb63dfdf50af0afc931ac03c1ec2b0 Mon Sep 17 00:00:00 2001 From: Simon Hamp Date: Tue, 14 Nov 2017 12:27:47 +0000 Subject: [PATCH 16/16] Simplify readme --- README.md | 43 +++++++++++-------------------------------- 1 file changed, 11 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index 15d5b6f..822a8a2 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,6 @@ # Laravel Ratchet Server -**This is an updated fork of [Laravel Ratchet](https://github.com/Askedio/laravel-ratchet), built specifically to work with this [custom fork](https://github.com/simonhamp/echo) of Laravel Echo.** - -This fork enables you to create and run a fully functioning WebSocket server in your Laravel app that can receive messages from ZeroMQ. +This package enables you to create and run a fully functioning WebSocket server in your Laravel app. It can optionally receive messages broadcast over ZeroMQ. ## Requirements @@ -13,31 +11,21 @@ This fork enables you to create and run a fully functioning WebSocket server in ## Installation -Because this is a custom fork and it relies on another custom package (and because I want to maintain compatibility with the original repos), the installation is a little more complicated (for now). You must do all of this in your `composer.json` manually: - -```json -"require": { - "askedio/laravel-ratchet": "^2.0" -}, -"repositories": [ - { - "type": "git", - "url": "git@github.com:simonhamp/laravel-ratchet.git" - } -] +```bash +$ composer require askedio/laravel-ratchet ``` The service provider is loaded automatically in Laravel 5.5 using Package Autodiscovery. -You **MUST** publish the vendor files so you can configure your server defaults. +Publish the vendor files so you can configure your server defaults. ```bash -$ php artisan vendor:publish --provider=LaravelRatchetServiceProvider +$ php artisan vendor:publish --provider="Askedio\LaravelRatchet\Providers\LaravelRatchetServiceProvider" ``` ## Starting the Server -The quickest way to start a standard WebSocket server is simply by running: +After completing installtion, the quickest way to start a standard WebSocket server is simply by running: ```bash $ php artisan ratchet:serve --driver=WsServer @@ -51,26 +39,17 @@ You should create your own server class inside your `app` folder by extending on Then update your `config/ratchet.php` file to point to your server `class`. -## Use with Laravel Echo and Broadcasting +## Use with Laravel Broadcasting -To use broadcasting in your Laravel app with the server you create, you will need to tell the server to connect to a ZeroMQ socket. +To use broadcasting in your Laravel app with the server you create, you will need a ZeroMQ broadcast driver for Laravel. -You can do this simply by passing the `-z` option, i.e.: +You will also need to tell your Ratchet server to bind to a ZeroMQ socket. You can do this simply by passing the `-z` option, i.e.: ```bash $ php artisan ratchet:serve --driver=WsServer -z ``` -This will connect to the socket you define in your `config/ratchet.php` settings. - -**You MUST set the `ratchet.zmq.method` option to `\ZMQ::SOCKET_PULL` to work with broadcasting.** - -Be sure to install [my fork of `laravel-zmq`](https://github.com/simonhamp/laravel-zmq) to go along with this package. - -This will allow you to use ZeroMQ as the back-channel to broadcast your events from your Laravel application to your Ratchet WebSocket server. - -For your web clients to subscribe to channels through Ratchet, you will need to install [this custom fork of Laravel Echo](https://github.com/simonhamp/echo). +This will connect to the socket you define in your `config/ratchet.php` settings and listen for messages from ZeroMQ. -## Acknowledgements +To handle messages published via ZeroMQ, simply add a `public function onEntry($messages)` method to your server class. This will allow you to receive messages inside your Ratchet server instance and determine how to route them. -This package would not be possible without the initial [awesome work](https://github.com/Askedio/laravel-ratchet) of [@gcphost](https://github.com/gcphost) of [Asked.io](https://medium.com/asked-io).