From 6bdde34cd6cc3335c26ce786e3170eef1a5b98d3 Mon Sep 17 00:00:00 2001 From: Herman Slatman Date: Fri, 8 Feb 2019 14:38:16 +0100 Subject: [PATCH 1/5] Disable the debug echo statements --- src/MqttClient.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/MqttClient.php b/src/MqttClient.php index 58e1683..8a93f2f 100644 --- a/src/MqttClient.php +++ b/src/MqttClient.php @@ -85,7 +85,7 @@ private function listenForPackets(Connection $stream) try { foreach (Factory::getNextPacket($this->version, $rawData) as $packet) { $stream->emit($packet::EVENT, [$packet]); - echo "received:\t" . get_class($packet) . PHP_EOL; + #echo "received:\t" . get_class($packet) . PHP_EOL; // TODO: wrap in a logger } } catch (ProtocolViolation $e) { @@ -133,7 +133,7 @@ public function sendConnectPacket(Connection $stream, ConnectionOptions $options $options->keepAlive ); $message = $packet->get(); - echo MessageHelper::getReadableByRawString($message); + #echo MessageHelper::getReadableByRawString($message); // TODO: wrap into a logger $deferred = new Deferred(); $stream->on(ConnectionAck::EVENT, function($message) use ($stream, $deferred) { @@ -153,7 +153,7 @@ public function sendConnectPacket(Connection $stream, ConnectionOptions $options private function sendPacketToStream(Connection $stream, ControlPacket $controlPacket) { - echo "send:\t\t" . get_class($controlPacket) . "\n"; + #echo "send:\t\t" . get_class($controlPacket) . "\n"; // TODO: wrap it to a logger... $message = $controlPacket->get(); return $stream->write($message); From e6e101ee76c4f79e52871fcc19a9ca8a6a605aec Mon Sep 17 00:00:00 2001 From: Herman Slatman Date: Fri, 8 Feb 2019 14:46:57 +0100 Subject: [PATCH 2/5] Setup debug logging using PSR3 --- composer.json | 3 ++- src/MqttClient.php | 18 ++++++++++++++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/composer.json b/composer.json index dfc86e6..6296201 100644 --- a/composer.json +++ b/composer.json @@ -15,7 +15,8 @@ } }, "require": { - "react/socket": "^1.1" + "react/socket": "^1.1", + "psr/log": "^1.1" }, "require-dev": { "phpunit/phpunit": "^5.0.0" diff --git a/src/MqttClient.php b/src/MqttClient.php index 8a93f2f..9329349 100644 --- a/src/MqttClient.php +++ b/src/MqttClient.php @@ -22,6 +22,7 @@ use oliverlorenz\reactphpmqtt\packet\UnsubscribeAck; use oliverlorenz\reactphpmqtt\protocol\Version; use oliverlorenz\reactphpmqtt\protocol\Violation as ProtocolViolation; +use Psr\Log\LoggerInterface; use React\EventLoop\LoopInterface as Loop; use React\EventLoop\Timer\Timer; use React\Promise\Deferred; @@ -38,14 +39,16 @@ class MqttClient private $loop; private $socketConnector; private $version; + private $logger; private $messageCounter = 1; - public function __construct(Loop $loop, ReactConnector $connector, Version $version) + public function __construct(Loop $loop, ReactConnector $connector, Version $version, LoggerInterface $logger = null) { $this->version = $version; $this->socketConnector = $connector; $this->loop = $loop; + $this->logger = $logger; } /** @@ -85,7 +88,7 @@ private function listenForPackets(Connection $stream) try { foreach (Factory::getNextPacket($this->version, $rawData) as $packet) { $stream->emit($packet::EVENT, [$packet]); - #echo "received:\t" . get_class($packet) . PHP_EOL; // TODO: wrap in a logger + $this->debug("received:\t" . get_class($packet)); } } catch (ProtocolViolation $e) { @@ -133,7 +136,7 @@ public function sendConnectPacket(Connection $stream, ConnectionOptions $options $options->keepAlive ); $message = $packet->get(); - #echo MessageHelper::getReadableByRawString($message); // TODO: wrap into a logger + $this->debug(MessageHelper::getReadableByRawString($message)); $deferred = new Deferred(); $stream->on(ConnectionAck::EVENT, function($message) use ($stream, $deferred) { @@ -153,7 +156,8 @@ public function sendConnectPacket(Connection $stream, ConnectionOptions $options private function sendPacketToStream(Connection $stream, ControlPacket $controlPacket) { - #echo "send:\t\t" . get_class($controlPacket) . "\n"; // TODO: wrap it to a logger... + $this->debug("send:\t\t" . get_class($controlPacket)); + $message = $controlPacket->get(); return $stream->write($message); @@ -249,4 +253,10 @@ private function getDefaultConnectionOptions() { return new ConnectionOptions(); } + + private function debug($message) { + if ($this->logger !== null) { + $this->logger->debug($message); + } + } } From 6a4d4bf0e57b820aef37e7a564bd02ac362f873a Mon Sep 17 00:00:00 2001 From: Herman Slatman Date: Fri, 8 Feb 2019 14:58:39 +0100 Subject: [PATCH 3/5] Pass the $logger to the MqttClient --- src/ClientFactory.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/ClientFactory.php b/src/ClientFactory.php index 255f8e4..61ca1aa 100644 --- a/src/ClientFactory.php +++ b/src/ClientFactory.php @@ -3,6 +3,7 @@ namespace oliverlorenz\reactphpmqtt; use oliverlorenz\reactphpmqtt\protocol\Version; +use Psr\Log\LoggerInterface; use React\Dns\Resolver\Factory as DnsResolverFactory; use React\EventLoop\Factory as EventLoopFactory; use React\Socket\DnsConnector; @@ -11,21 +12,21 @@ class ClientFactory { - public static function createClient(Version $version, $resolverIp = '8.8.8.8') + public static function createClient(Version $version, $resolverIp = '8.8.8.8', LoggerInterface $logger = null) { $loop = EventLoopFactory::create(); $connector = self::createDnsConnector($resolverIp, $loop); - return new MqttClient($loop, $connector, $version); + return new MqttClient($loop, $connector, $version, $logger); } - public static function createSecureClient(Version $version, $resolverIp = '8.8.8.8') + public static function createSecureClient(Version $version, $resolverIp = '8.8.8.8', LoggerInterface $logger = null) { $loop = EventLoopFactory::create(); $connector = self::createDnsConnector($resolverIp, $loop); $secureConnector = new SecureConnector($connector, $loop); - return new MqttClient($loop, $secureConnector, $version); + return new MqttClient($loop, $secureConnector, $version, $logger); } private static function createDnsConnector($resolverIp, $loop) From 309bbcd388795a9aba05dd3a6fa2c5ed03c8d2cd Mon Sep 17 00:00:00 2001 From: Herman Slatman Date: Fri, 8 Feb 2019 15:21:15 +0100 Subject: [PATCH 4/5] Remove the $logger from being injected because of caching/serialization issue Injecting the $logger through ClientFactory would result in an error in the React\Dns\Resolver\Factory.php file. In Factory.php line 90: [ErrorException] Warning: strpos() expects parameter 1 to be string, object given I haven't bothered too much with finding out what the problem is here. --- src/ClientFactory.php | 8 ++++---- src/MqttClient.php | 9 ++++++++- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/ClientFactory.php b/src/ClientFactory.php index 61ca1aa..142429a 100644 --- a/src/ClientFactory.php +++ b/src/ClientFactory.php @@ -12,21 +12,21 @@ class ClientFactory { - public static function createClient(Version $version, $resolverIp = '8.8.8.8', LoggerInterface $logger = null) + public static function createClient(Version $version, $resolverIp = '8.8.8.8') { $loop = EventLoopFactory::create(); $connector = self::createDnsConnector($resolverIp, $loop); - return new MqttClient($loop, $connector, $version, $logger); + return new MqttClient($loop, $connector, $version); } - public static function createSecureClient(Version $version, $resolverIp = '8.8.8.8', LoggerInterface $logger = null) + public static function createSecureClient(Version $version, $resolverIp = '8.8.8.8') { $loop = EventLoopFactory::create(); $connector = self::createDnsConnector($resolverIp, $loop); $secureConnector = new SecureConnector($connector, $loop); - return new MqttClient($loop, $secureConnector, $version, $logger); + return new MqttClient($loop, $secureConnector, $version); } private static function createDnsConnector($resolverIp, $loop) diff --git a/src/MqttClient.php b/src/MqttClient.php index 9329349..3f0a599 100644 --- a/src/MqttClient.php +++ b/src/MqttClient.php @@ -43,11 +43,18 @@ class MqttClient private $messageCounter = 1; - public function __construct(Loop $loop, ReactConnector $connector, Version $version, LoggerInterface $logger = null) + public function __construct(Loop $loop, ReactConnector $connector, Version $version) { $this->version = $version; $this->socketConnector = $connector; $this->loop = $loop; + } + + /** + * @param LoggerInterface $logger + */ + public function setLogger(LoggerInterface $logger) + { $this->logger = $logger; } From cf4cd9672126954b42df3f175146115dbd3247f4 Mon Sep 17 00:00:00 2001 From: Herman Slatman Date: Fri, 8 Feb 2019 15:40:29 +0100 Subject: [PATCH 5/5] Allow two ways for injecting the $logger --- src/ClientFactory.php | 8 ++++---- src/MqttClient.php | 7 ++++--- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/ClientFactory.php b/src/ClientFactory.php index 142429a..61ca1aa 100644 --- a/src/ClientFactory.php +++ b/src/ClientFactory.php @@ -12,21 +12,21 @@ class ClientFactory { - public static function createClient(Version $version, $resolverIp = '8.8.8.8') + public static function createClient(Version $version, $resolverIp = '8.8.8.8', LoggerInterface $logger = null) { $loop = EventLoopFactory::create(); $connector = self::createDnsConnector($resolverIp, $loop); - return new MqttClient($loop, $connector, $version); + return new MqttClient($loop, $connector, $version, $logger); } - public static function createSecureClient(Version $version, $resolverIp = '8.8.8.8') + public static function createSecureClient(Version $version, $resolverIp = '8.8.8.8', LoggerInterface $logger = null) { $loop = EventLoopFactory::create(); $connector = self::createDnsConnector($resolverIp, $loop); $secureConnector = new SecureConnector($connector, $loop); - return new MqttClient($loop, $secureConnector, $version); + return new MqttClient($loop, $secureConnector, $version, $logger); } private static function createDnsConnector($resolverIp, $loop) diff --git a/src/MqttClient.php b/src/MqttClient.php index 3f0a599..7a7b441 100644 --- a/src/MqttClient.php +++ b/src/MqttClient.php @@ -43,17 +43,18 @@ class MqttClient private $messageCounter = 1; - public function __construct(Loop $loop, ReactConnector $connector, Version $version) + public function __construct(Loop $loop, ReactConnector $connector, Version $version, LoggerInterface $logger = null) { $this->version = $version; $this->socketConnector = $connector; $this->loop = $loop; + $this->logger = $logger; } /** - * @param LoggerInterface $logger + * @param LoggerInterface|null $logger */ - public function setLogger(LoggerInterface $logger) + public function setLogger(LoggerInterface $logger = null) { $this->logger = $logger; }