class ChatListener
{
#[AsCentrifugoChannelListener(channel: 'news')]
public function onNewsPublish(PublishEvent $event): void {}
#[AsCentrifugoChannelListener(channel: 'chat:*', priority: 10)]
public function onChatSubscribe(SubscribeEvent $event): void
{
$channel = $event->getRequest()->channel;
}
}
#[AsCentrifugoChannelListener(channel: 'private:*', event: PublishEvent::class, method: 'handle')]
class PrivateChannelHandler
{
public function handle(PublishEvent $event): void { ... }
}
class RpcHandler
{
#[AsCentrifugoRpcListener(rpcMethod: 'ping')]
public function onPing(RPCEvent $event): void
{
$event->setResponse(new RPCResponse(data: ['pong' => true]));
}
}
#[AsEventListener(event: JobsRunEvent::class, method: "onJob")]
final class JobListener
{
public function onJob(JobsRunEvent $event): void
{
$event->getName(); // job name
$event->getQueue(); // broker queue name
$event->getPipeline(); // RoadRunner pipeline name
$event->getId(); // task id
$event->getHeaders(); // array<string, string[]>
$data = json_decode($event->getPayload(), true); // raw string — you own the format
}
}
use FluffyDiscord\RoadRunnerBundle\Job\Attribute\AsJob;
#[AsJob(queue: 'emails', delay: 0, priority: 10)]
final class SendWelcomeEmail
{
public function __construct(public string $email) {}
}
public function __construct(private JobDispatcher $jobs) {}
$this->jobs->dispatch(new SendWelcomeEmail('[email protected]'));
$this->jobs->dispatch(new SendWelcomeEmail('[email protected]'), queue: 'priority', delay: 30, priority: 5);
#[AsMessageHandler]
final class SendWelcomeEmailHandler
{
public function __invoke(SendWelcomeEmail $message): void {}
}
#[AsMessageHandler]
final class SendWelcomeEmailHandler
{
public function __invoke(SendWelcomeEmail $message, ReceivedTaskInterface $task): void
{
// $task->getHeaders(); $task->withDelay(30)->requeue(...); $task->nack($e, redelivery: false);
}
}
use FluffyDiscord\RoadRunnerBundle\Warmup\WorkerWarmerInterface;
class MyCacheWarmer implements WorkerWarmerInterface
{
public function __construct(private readonly MyExpensiveService $service)
{
}
public function warmup(): void
{
$this->service->buildInMemoryIndexes();
}
}
public function __construct(private LockFactory $locks) {}
$lock = $this->locks->createLock('report-generation');
if ($lock->acquire()) { /* ... */ $lock->release(); }
// leaks the first user's email to every later request of that worker
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
"label" => $this->security->getUser()->getEmail(),
]);
}