diff options
Diffstat (limited to 'infrastructure')
-rw-r--r-- | infrastructure/Console/Commands/WebSocketServerCommand.php | 38 | ||||
-rw-r--r-- | infrastructure/Console/Kernel.php | 3 | ||||
-rw-r--r-- | infrastructure/Http/WebSocketController.php | 56 |
3 files changed, 96 insertions, 1 deletions
diff --git a/infrastructure/Console/Commands/WebSocketServerCommand.php b/infrastructure/Console/Commands/WebSocketServerCommand.php new file mode 100644 index 0000000..4723b29 --- /dev/null +++ b/infrastructure/Console/Commands/WebSocketServerCommand.php @@ -0,0 +1,38 @@ +<?php + +namespace Infrastructure\Console\Commands; + +use Illuminate\Console\Command; +use Infrastructure\Http\WebSocketController; +use Ratchet\Http\HttpServer; +use Ratchet\Server\IoServer; +use Ratchet\WebSocket\WsServer; + +class WebSocketServerCommand extends Command +{ + /** + * The console command name. + * + * @var string + */ + protected $name = 'websocket'; + + /** + * Execute the console command. + * + * @return void + */ + public function fire() + { + $server = IoServer::factory( + new HttpServer( + new WsServer( + new WebSocketController() + ) + ), + 1337 + ); + $this->line('Started server.'); + $server->run(); + } +}
\ No newline at end of file diff --git a/infrastructure/Console/Kernel.php b/infrastructure/Console/Kernel.php index dffc73a..13329ae 100644 --- a/infrastructure/Console/Kernel.php +++ b/infrastructure/Console/Kernel.php @@ -14,7 +14,8 @@ class Kernel extends ConsoleKernel * @var array */ protected $commands = [ - AddUserCommand::class + AddUserCommand::class, + Commands\WebSocketServerCommand::class ]; /** diff --git a/infrastructure/Http/WebSocketController.php b/infrastructure/Http/WebSocketController.php new file mode 100644 index 0000000..19e0868 --- /dev/null +++ b/infrastructure/Http/WebSocketController.php @@ -0,0 +1,56 @@ +<?php + +namespace Infrastructure\Http; + +use Ratchet\ConnectionInterface; +use Ratchet\MessageComponentInterface; + +class WebSocketController extends Controller implements MessageComponentInterface +{ + private $connections = []; + + /** + * When a new connection is opened it will be passed to this method + * @param ConnectionInterface $conn The socket/connection that just connected to your application + * @throws \Exception + */ + function onOpen(ConnectionInterface $conn) + { + $this->connections[$conn->resourceId] = compact('conn') + ['user_id' => null]; + } + + /** + * This is called before or after a socket is closed (depends on how it's closed). SendMessage to $conn will not result in an error if it has already been closed. + * @param ConnectionInterface $conn The socket/connection that is closing/closed + * @throws \Exception + */ + function onClose(ConnectionInterface $conn) + { + $disconnectedId = $conn->resourceId; + unset($this->connections[$disconnectedId]); + } + + /** + * If there is an error with one of the sockets, or somewhere in the application where an Exception is thrown, + * the Exception is sent back down the stack, handled by the Server and bubbled back up the application through this method + * @param ConnectionInterface $conn + * @param \Exception $e + * @throws \Exception + */ + function onError(ConnectionInterface $conn, \Exception $e) + { + unset($this->connections[$conn->resourceId]); + $conn->close(); + } + + /** + * Triggered when a client sends data through the socket + * @param \Ratchet\ConnectionInterface $conn The socket/connection that sent the message to your application + * @param string $msg The message received + * @throws \Exception + */ + function onMessage(ConnectionInterface $conn, $msg) + { + + } +}
\ No newline at end of file |