Description
The function TopicPeriodicTimerInterface::registerPeriodicTimer takes a Topic parameter, but once the first Topic registers a timer, it is not called for any additional Topic. Furthermore, if any one Topic has zero connections, any and all timers registered within the TopicInterface are cleared.
Example code
<?php
namespace App\Websocket\Topic;
use Gos\Bundle\WebSocketBundle\Topic\TopicPeriodicTimerInterface;
use Gos\Bundle\WebSocketBundle\Topic\TopicPeriodicTimerTrait;
use Ratchet\Wamp\Topic;
class AcmePeriodicTopic extends AcmeTopic implements TopicPeriodicTimerInterface
{
use TopicPeriodicTimerTrait;
public function registerPeriodicTimer(Topic $topic): void
{
// Adds the periodic timer the first time a client connects to the topic
$this->periodicTimer->addPeriodicTimer(
$this,
'hello',
300,
function () use ($topic) {
$topic->broadcast('Hello world');
}
);
}
/**
* Name of the topic.
*/
public function getName(): string
{
return 'acme.periodic.topic';
}
}
Steps
- client 1 subscribes to
acme/foo
- timer is registered for
acme/foo
- client 2 subscribes to
acme/bar
- timer isn't registered for
acme/bar
- client 2 unsubscribes from
acme/bar
- timer is cleared for
acme/foo
Description
The function
TopicPeriodicTimerInterface::registerPeriodicTimertakes aTopicparameter, but once the firstTopicregisters a timer, it is not called for any additionalTopic. Furthermore, if any oneTopichas zero connections, any and all timers registered within theTopicInterfaceare cleared.Example code
Steps
acme/fooacme/fooacme/baracme/baracme/baracme/foo