public function start() { $packet = new PublishRequestPacket(); $packet->setTopic($this->message->getTopic()); $packet->setPayload($this->message->getPayload()); $packet->setRetained($this->message->isRetained()); $packet->setDuplicate($this->message->isDuplicate()); $packet->setQosLevel($this->message->getQosLevel()); if ($this->message->getQosLevel() === 0) { $this->succeed($this->message); } else { $packet->setIdentifier($this->identifier); } return $packet; }
/** * Calls the given generator periodically and publishes the return value. * * @param int $interval * @param Message $message * @param callable $generator * * @return ExtendedPromiseInterface */ public function publishPeriodically($interval, Message $message, callable $generator) { if (!$this->isConnected) { return new RejectedPromise(new \LogicException('The client is not connected.')); } $deferred = new Deferred(); $this->timer[] = $this->loop->addPeriodicTimer($interval, function () use($message, $generator, $deferred) { $this->publish($message->withPayload($generator($message->getTopic())))->then(function ($value) use($deferred) { $deferred->notify($value); }, function (\Exception $e) use($deferred) { $deferred->reject($e); }); }); return $deferred->promise(); }