public function publish(Stream $stream, $topic, $message, $qos = 0, $dup = false) { $deferred = new Deferred(); $packet = new Publish($this->version); $packet->setTopic($topic); $packet->setMessageId($this->messageCounter++); $packet->setQos($qos); $packet->setDup($dup); $packet->addRawToPayLoad($message); $success = $this->sentMessageToStream($stream, $packet); if ($success) { $deferred->resolve($stream); } else { $deferred->reject(); } return $deferred->promise(); }