app = $app; /* $this->consoleOutput = $consoleOutput; $this->enabled = $enabled; */ } public function enable() { $this->enabled = true; } public function onOpen(ConnectionInterface $connection) { $request = $connection->httpRequest; $queryParameters = []; parse_str($request->getUri()->getQuery(), $queryParameters); $this->warn("New connection opened for app key {$queryParameters['appKey']}."); $this->app->onOpen($connection); } public function onMessage(ConnectionInterface $connection, MessageInterface $message) { $this->info("{$connection->appId}: connection id {$connection->socketId} received message: {$message->getPayload()}."); $this->app->onMessage($connection, $message); } public function onClose(ConnectionInterface $connection) { $this->warn("{$connection->appId}: connection id {$connection->socketId} closed."); $this->app->onClose($connection); } public function onError(ConnectionInterface $connection, Exception $exception) { $exceptionClass = get_class($exception); $message = "{$connection->appId}: execption `{$exceptionClass}` thrown: `{$exception->getMessage()}`"; /* * TODO: add verbose option if ($this->isVerbose) { $message .= $exception->getTraceAsString(); } */ $this->error($message); $this->app->onError($connection, $exception); } protected function info(string $message) { $this->line($message, 'info'); } protected function warn(string $message) { $this->line($message, 'warning'); } protected function error(string $message) { $this->line($message, 'error'); } protected function line(string $message, string $style) { echo $message; return; $styled = $style ? "<$style>$message" : $message; $this->consoleOutput->writeln($styled); } }