Refactoring, logging improvements
This commit is contained in:
		@@ -9,4 +9,6 @@ interface SubscriberInterface
 | 
			
		||||
    public function isAuthorized(): bool;
 | 
			
		||||
 | 
			
		||||
    public function getPayload(): ?array;
 | 
			
		||||
 | 
			
		||||
    public function getId(): string;
 | 
			
		||||
}
 | 
			
		||||
@@ -2,6 +2,7 @@
 | 
			
		||||
 | 
			
		||||
namespace NoccyLabs\Mercureact\Broker;
 | 
			
		||||
 | 
			
		||||
use Psr\Log\LoggerInterface;
 | 
			
		||||
use SplObjectStorage;
 | 
			
		||||
 | 
			
		||||
class TopicManager
 | 
			
		||||
@@ -13,7 +14,7 @@ class TopicManager
 | 
			
		||||
 | 
			
		||||
    private SplObjectStorage $subscribers;
 | 
			
		||||
 | 
			
		||||
    public function __construct()
 | 
			
		||||
    public function __construct(private LoggerInterface $logger)
 | 
			
		||||
    {
 | 
			
		||||
        $this->subscribers = new SplObjectStorage();
 | 
			
		||||
    }
 | 
			
		||||
@@ -21,6 +22,7 @@ class TopicManager
 | 
			
		||||
    public function getTopic(string $topic): Topic
 | 
			
		||||
    {
 | 
			
		||||
        if (!isset($this->topics[$topic])) {
 | 
			
		||||
            $this->logger->debug("Created topic: {$topic}");
 | 
			
		||||
            $this->topics[$topic] = new Topic($topic);
 | 
			
		||||
        }
 | 
			
		||||
        return $this->topics[$topic];
 | 
			
		||||
@@ -30,12 +32,14 @@ class TopicManager
 | 
			
		||||
    {
 | 
			
		||||
        $this->lastEventId = $message->id;
 | 
			
		||||
        foreach ($message->topic as $topic) {
 | 
			
		||||
            $this->logger->debug("Publish: {$message->id} → ".json_encode($message->topic,JSON_UNESCAPED_SLASHES));
 | 
			
		||||
            $this->getTopic($topic)->publish($message);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function subscribe(SubscriberInterface $subscriber, array $topics): void
 | 
			
		||||
    {
 | 
			
		||||
        $this->logger->debug("Subscribed: ".$subscriber->getId()." + ".json_encode($topics,JSON_UNESCAPED_SLASHES));
 | 
			
		||||
        $this->subscribers->attach($subscriber);
 | 
			
		||||
        foreach ($topics as $topic) {
 | 
			
		||||
            $this->getTopic($topic)->addSubscriber($subscriber);
 | 
			
		||||
@@ -44,8 +48,9 @@ class TopicManager
 | 
			
		||||
 | 
			
		||||
    public function unsubscribe(SubscriberInterface $subscriber, ?array $topics=null): void
 | 
			
		||||
    {
 | 
			
		||||
        $this->subscribers->detach($subscriber);
 | 
			
		||||
        $this->logger->debug("Unsubscribed: ".$subscriber->getId()." - ".json_encode($topics,JSON_UNESCAPED_SLASHES));
 | 
			
		||||
        if (!$topics) {
 | 
			
		||||
            $this->subscribers->detach($subscriber);
 | 
			
		||||
            foreach ($this->topics as $topic) {
 | 
			
		||||
                $topic->removeSubscriber($subscriber);
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -3,6 +3,7 @@
 | 
			
		||||
namespace NoccyLabs\Mercureact;
 | 
			
		||||
 | 
			
		||||
use Monolog\Handler\StreamHandler;
 | 
			
		||||
use Monolog\Level;
 | 
			
		||||
use Monolog\Logger;
 | 
			
		||||
use NoccyLabs\Mercureact\Http\Server;
 | 
			
		||||
use Psr\Log\LoggerInterface;
 | 
			
		||||
@@ -20,17 +21,17 @@ class Daemon
 | 
			
		||||
 | 
			
		||||
    private LoggerInterface $logger;
 | 
			
		||||
 | 
			
		||||
    public function __construct(Configuration $config, ?LoopInterface $loop=null)
 | 
			
		||||
    public function __construct(Configuration $config, bool $verbose=false, ?LoopInterface $loop=null)
 | 
			
		||||
    {
 | 
			
		||||
        $this->config = $config;
 | 
			
		||||
        $this->loop = $loop??Loop::get();
 | 
			
		||||
        $this->logger = $this->createLogger();
 | 
			
		||||
        $this->logger = $this->createLogger($verbose);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private function createLogger(): Logger
 | 
			
		||||
    private function createLogger(bool $verbose): Logger
 | 
			
		||||
    {
 | 
			
		||||
        $handlers = [
 | 
			
		||||
            new StreamHandler(STDOUT)
 | 
			
		||||
            new StreamHandler(STDOUT, $verbose?Level::Debug:Level::Info)
 | 
			
		||||
        ];
 | 
			
		||||
        $logger = new Logger("main", $handlers);
 | 
			
		||||
        return $logger;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace NoccyLabs\Mercureact\Http\Exception;
 | 
			
		||||
namespace NoccyLabs\Mercureact\Exception;
 | 
			
		||||
 | 
			
		||||
use Exception;
 | 
			
		||||
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace NoccyLabs\Mercureact\Http\Exception;
 | 
			
		||||
namespace NoccyLabs\Mercureact\Exception;
 | 
			
		||||
 | 
			
		||||
use Exception;
 | 
			
		||||
 | 
			
		||||
@@ -6,8 +6,8 @@ use NoccyLabs\Mercureact\Broker\Message;
 | 
			
		||||
use NoccyLabs\Mercureact\Broker\SseSubscriber;
 | 
			
		||||
use NoccyLabs\Mercureact\Broker\TopicManager;
 | 
			
		||||
use NoccyLabs\Mercureact\Configuration;
 | 
			
		||||
use NoccyLabs\Mercureact\Http\Exception\RequestException;
 | 
			
		||||
use NoccyLabs\Mercureact\Http\Exception\SecurityException;
 | 
			
		||||
use NoccyLabs\Mercureact\Exception\RequestException;
 | 
			
		||||
use NoccyLabs\Mercureact\Exception\SecurityException;
 | 
			
		||||
use Psr\Http\Message\ResponseInterface;
 | 
			
		||||
use Psr\Http\Message\ServerRequestInterface;
 | 
			
		||||
use React\EventLoop\Loop;
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
namespace NoccyLabs\Mercureact\Http\Middleware;
 | 
			
		||||
 | 
			
		||||
use NoccyLabs\Mercureact\Configuration;
 | 
			
		||||
use NoccyLabs\Mercureact\Http\Exception\SecurityException;
 | 
			
		||||
use NoccyLabs\Mercureact\Exception\SecurityException;
 | 
			
		||||
use Psr\Http\Message\ResponseInterface;
 | 
			
		||||
use Psr\Http\Message\ServerRequestInterface;
 | 
			
		||||
use Psr\Log\LoggerInterface;
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
namespace NoccyLabs\Mercureact\Http\Middleware;
 | 
			
		||||
 | 
			
		||||
use NoccyLabs\Mercureact\Configuration;
 | 
			
		||||
use NoccyLabs\Mercureact\Http\Exception\SecurityException;
 | 
			
		||||
use NoccyLabs\Mercureact\Exception\SecurityException;
 | 
			
		||||
use NoccyLabs\SimpleJWT\JWTToken;
 | 
			
		||||
use NoccyLabs\SimpleJWT\Key\JWTPlaintextKey;
 | 
			
		||||
use NoccyLabs\SimpleJWT\Validator\JWTValidator;
 | 
			
		||||
 
 | 
			
		||||
@@ -54,8 +54,13 @@ class Server
 | 
			
		||||
        $this->config = $config;
 | 
			
		||||
 | 
			
		||||
        $this->logger = $logger ?? new NullLogger();
 | 
			
		||||
        if ($logger instanceof Logger) {
 | 
			
		||||
            $topicLogger = $logger->withName("broker");
 | 
			
		||||
        } else {
 | 
			
		||||
            $topicLogger = $this->logger;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $this->topicManager = new TopicManager();
 | 
			
		||||
        $this->topicManager = new TopicManager($topicLogger);
 | 
			
		||||
        $this->loop->addPeriodicTimer(30, function () {
 | 
			
		||||
            $this->topicManager->garbageCollect();
 | 
			
		||||
        });
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user