diff --git a/src/Subscriber.php b/src/Subscriber.php index cb0c147..529ccb3 100644 --- a/src/Subscriber.php +++ b/src/Subscriber.php @@ -12,6 +12,7 @@ final class Subscriber { public const STOP = 0; public const CHANGE_TIMEOUT = 1; + public const TIMEOUT = 2; private Consumer $reader; @@ -21,7 +22,7 @@ final class Subscriber } /** - * @psalm-return Generator + * @psalm-return Generator */ public function subscribe(string $topic, string $channel, float $timeout = 0): Generator { @@ -45,6 +46,10 @@ final class Subscriber $timeout = $newTimeout; } + + if (self::TIMEOUT === $command) { + yield $timeout; + } } $this->reader->disconnect(); diff --git a/tests/SubscriberTest.php b/tests/SubscriberTest.php new file mode 100644 index 0000000..3136750 --- /dev/null +++ b/tests/SubscriberTest.php @@ -0,0 +1,45 @@ +subscriber = new Subscriber($consumer); + } + + public function testChangeInterval(): void + { + $generator = $this->subscriber->subscribe(__FUNCTION__, __FUNCTION__, 0.1); + + self::assertSame(0.1, $generator->send(Subscriber::TIMEOUT)); + $generator->next(); + + $generator->send(Subscriber::CHANGE_TIMEOUT); + $generator->send(0.2); + + self::assertSame(0.2, $generator->send(Subscriber::TIMEOUT)); + } + + public function testInvalidChangeInterval(): void + { + $this->expectException(\Nsq\Exception::class); + $this->expectExceptionMessage('Timeout must be float, "string" given.'); + + $generator = $this->subscriber->subscribe(__FUNCTION__, __FUNCTION__); + $generator->send(Subscriber::CHANGE_TIMEOUT); + // @phpstan-ignore-next-line + $generator->send('bla'); + } +}