/** * 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; }
/** * @param Session $session * @param SubscribeMessage $msg */ public function processSubscribe(Session $session, SubscribeMessage $msg) { if (!isset($this->topics[$msg->getTopicName()])) { $this->topics[$msg->getTopicName()] = array(); } array_push($this->topics[$msg->getTopicName()], $session); //Check if this session has not already subscribed for this topic $subscriptionCheck = $this->checkSubscriptions($session->getSessionId(), $msg->getTopicName()); if (!$subscriptionCheck) { $subscription = new Subscription($msg->getTopicName(), $session); $this->subscriptions->attach($subscription); $subscribedMsg = new SubscribedMessage($msg->getRequestId(), $msg->getTopicName()); $session->sendMessage($subscribedMsg); } }
/** * Process subscribe message * * @param \Thruway\Session $session * @param \Thruway\Message\SubscribeMessage $msg */ protected function processSubscribe(Session $session, SubscribeMessage $msg) { if (!static::uriIsValid($msg->getTopicName())) { $errorMsg = ErrorMessage::createErrorMessageFromMessage($msg); $session->sendMessage($errorMsg->setErrorURI('wamp.error.invalid_uri')); return; } if (!isset($this->topics[$msg->getTopicName()])) { $this->topics[$msg->getTopicName()] = []; } array_push($this->topics[$msg->getTopicName()], $session); $subscription = Subscription::createSubscriptionFromSubscribeMessage($session, $msg); $this->subscriptions->attach($subscription); $subscribedMsg = new SubscribedMessage($msg->getRequestId(), $subscription->getId()); $session->sendMessage($subscribedMsg); }