Implemented subscription logic
This commit is contained in:
		@@ -9,6 +9,12 @@ class TopicManager
 | 
			
		||||
    /** @var array<string,Topic> */
 | 
			
		||||
    private array $topics = [];
 | 
			
		||||
 | 
			
		||||
    private SplObjectStorage $subscribers;
 | 
			
		||||
 | 
			
		||||
    public function __construct()
 | 
			
		||||
    {
 | 
			
		||||
        $this->subscribers = new SplObjectStorage();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getTopic(string $topic): Topic
 | 
			
		||||
    {
 | 
			
		||||
@@ -25,6 +31,26 @@ class TopicManager
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function subscribe(SubscriberInterface $subscriber, array $topics): void
 | 
			
		||||
    {
 | 
			
		||||
        foreach ($topics as $topic) {
 | 
			
		||||
            $this->getTopic($topic)->addSubscriber($subscriber);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function unsubscribe(SubscriberInterface $subscriber, ?array $topics=null): void
 | 
			
		||||
    {
 | 
			
		||||
        if (!$topics) {
 | 
			
		||||
            foreach ($this->topics as $topic) {
 | 
			
		||||
                $topic->removeSubscriber($subscriber);
 | 
			
		||||
            }
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        foreach ($topics as $topic) {
 | 
			
		||||
            $this->getTopic($topic)->removeSubscriber($subscriber);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getTopicCount(): int
 | 
			
		||||
    {
 | 
			
		||||
        return count($this->topics);
 | 
			
		||||
@@ -32,7 +58,7 @@ class TopicManager
 | 
			
		||||
 | 
			
		||||
    public function getSubscriberCount(): int
 | 
			
		||||
    {
 | 
			
		||||
        return array_sum(array_map(fn($t) => $t->getSubscriberCount(), $this->topics));
 | 
			
		||||
        return count($this->subscribers);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function garbageCollect(): void
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user