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