/** * Create Subscription from SubscribeMessage * * @param Session $session * @param SubscribeMessage $msg * @return Subscription */ public static function createSubscriptionFromSubscribeMessage(Session $session, SubscribeMessage $msg) { $options = $msg->getOptions(); $subscription = new Subscription($msg->getTopicName(), $session, $options); if (isset($options->disclose_publisher) && $options->disclose_publisher === true) { $subscription->setDisclosePublisher(true); } return $subscription; }
/** * Gets and published the topics state to this subscription * * @param Subscription $subscription * @return mixed */ public function publishState(Subscription $subscription) { //Pause all non-state building event messages $subscription->pauseForState(); $sessionId = $subscription->getSession()->getSessionId(); $this->clientSession->call($this->getProcedureName(), [$subscription->getUri(), $sessionId, $subscription->getOptions(), $subscription->getSession()->getAuthenticationDetails()])->then(function ($res) use($subscription) { $pubId = null; if (isset($res[0])) { $pubId = $res[0]; } $subscription->unPauseForState($pubId); }, function ($error) use($subscription) { Logger::error($this, "Could not call '{$this->getProcedureName()}' when restoring state"); $subscription->unPauseForState(); }); }
/** * @param Subscription $subscription * @return StateHandlerRegistration|bool|null */ private function getStateHandlerRegistrationForSubscription(Subscription $subscription) { $subscriptionGroup = $subscription->getSubscriptionGroup(); if ($subscriptionGroup instanceof SubscriptionGroup) { if (!$this->stateHandlerMap->contains($subscriptionGroup)) { $this->setupStateHandlerRegistration($subscriptionGroup); } return $this->stateHandlerMap[$subscriptionGroup]; } Logger::alert($this, "processSubscriptionAdded called with subscription that does not have subscriptionGroup set."); return false; }
/** * @param Session $session * @param SubscribeMessage $msg * @return Subscription */ public function processSubscribe(Session $session, SubscribeMessage $msg) { $subscription = Subscription::createSubscriptionFromSubscribeMessage($session, $msg); $this->addSubscription($subscription); $subscription->setSubscriptionGroup($this); Logger::debug($this, "Added subscription to \"" . $this->getMatchType() . "\":\"" . $this->getUri() . "\""); $session->sendMessage(new SubscribedMessage($msg->getRequestId(), $subscription->getId())); return $subscription; }