Ejemplo n.º 1
0
 /**
  * @param ClientSession $session
  * @param EventMessage $msg
  */
 public function processEvent(ClientSession $session, EventMessage $msg)
 {
     foreach ($this->subscriptions as $key => $subscription) {
         if ($subscription["subscription_id"] === $msg->getSubscriptionId()) {
             call_user_func_array($subscription["callback"], [$msg->getArguments(), $msg->getArgumentsKw(), $msg->getDetails(), $msg->getPublicationId()]);
             break;
         }
     }
 }
Ejemplo n.º 2
0
 /**
  * @param Session $session
  * @param PublishMessage $msg
  */
 public function processPublish(Session $session, PublishMessage $msg)
 {
     $this->manager->debug("processing publish message");
     $receivers = isset($this->topics[$msg->getTopicName()]) ? $this->topics[$msg->getTopicName()] : null;
     //If the topic doesn't have any subscribers
     if (empty($receivers)) {
         $receivers = array();
     }
     // see if they wanted confirmation
     $options = $msg->getOptions();
     if (is_array($options)) {
         if (isset($options['acknowledge']) && $options['acknowledge'] == true) {
             $publicationId = Session::getUniqueId();
             $session->sendMessage(new PublishedMessage($msg->getRequestId(), $publicationId));
         }
     }
     $eventMsg = EventMessage::createFromPublishMessage($msg);
     /* @var $receiver Session */
     foreach ($receivers as $receiver) {
         if ($receiver != $session) {
             $receiver->sendMessage($eventMsg);
         }
     }
 }
Ejemplo n.º 3
0
 /**
  * @param Session $session
  * @param EventMessage $msg
  * @param Subscription $subscription
  */
 private function disclosePublisherOption(Session $session, EventMessage $msg, Subscription $subscription)
 {
     if ($subscription->isDisclosePublisher() === true) {
         $details = ["caller" => $session->getSessionId(), "authid" => $session->getAuthenticationDetails()->getAuthId(), "authrole" => $session->getAuthenticationDetails()->getAuthRole(), "authroles" => $session->getAuthenticationDetails()->getAuthRoles(), "authmethod" => $session->getAuthenticationDetails()->getAuthMethod()];
         $msg->setDetails(array_merge($msg->getDetails(), $details));
     }
 }
Ejemplo n.º 4
0
 /**
  * @param EventMessage $msg
  */
 public function sendEventMessage(EventMessage $msg)
 {
     if ($this->pausedForState && !$msg->isRestoringState()) {
         $this->pauseQueue->enqueue($msg);
         return;
     }
     $this->getSession()->sendMessage($msg);
 }
Ejemplo n.º 5
0
 /**
  * Send an Event Message for each subscription
  * @param Session $session
  * @param PublishMessage $msg
  * @param Subscription $subscription
  */
 private function sendEventMessage(Session $session, PublishMessage $msg, Subscription $subscription)
 {
     $sessionId = $subscription->getSession()->getSessionId();
     $authroles = [];
     $authid = "";
     $authenticationDetails = $subscription->getSession()->getAuthenticationDetails();
     if ($authenticationDetails) {
         $authroles = $authenticationDetails->getAuthRoles();
         $authid = $authenticationDetails->getAuthId();
     }
     if ((!$msg->excludeMe() || $subscription->getSession() != $session) && !$msg->isExcluded($sessionId) && $msg->isWhiteListed($sessionId) && $msg->hasEligibleAuthrole($authroles) && $msg->hasEligibleAuthid($authid)) {
         $eventMsg = EventMessage::createFromPublishMessage($msg, $subscription->getId());
         if ($subscription->isDisclosePublisher() === true) {
             $eventMsg->disclosePublisher($session);
         }
         if ($this->getMatchType() != "exact") {
             $eventMsg->getDetails()->topic = $msg->getUri();
         }
         $subscription->sendEventMessage($eventMsg);
     }
 }
Ejemplo n.º 6
0
 protected function assertEventMessagesEqual(EventMessage $em1, EventMessage $em2)
 {
     // we are not checking the publication id or subscription
     $em2->setPublicationId($em1->getPublicationId());
     $em2->setSubscriptionId($em1->getSubscriptionId());
     $this->assertEquals(json_encode($em1), json_encode($em2), "EventMessages are equal");
 }