Exemplo n.º 1
7
 /**
  * @param ConnectionInterface $conn
  * @param string              $id
  * @param string              $topic
  * @param WampRequest         $request
  * @param array               $params
  */
 public function dispatch(ConnectionInterface $conn, $id, $topic, WampRequest $request, array $params)
 {
     $callback = $request->getRoute()->getCallback();
     try {
         $procedure = $this->rpcRegistry->getRpc($callback);
     } catch (\Exception $e) {
         $conn->callError($id, $topic, $e->getMessage(), ['rpc' => $topic, 'request' => $request]);
         return;
     }
     $method = $this->toCamelCase($request->getAttributes()->get('method'));
     $result = null;
     try {
         $result = call_user_func([$procedure, $method], $conn, $request, $params);
     } catch (\Exception $e) {
         $conn->callError($id, $topic, $e->getMessage(), ['code' => $e->getCode(), 'rpc' => $topic, 'params' => $params, 'request' => $request]);
         return;
     }
     if ($result === null) {
         $result = false;
     }
     if ($result) {
         if ($result instanceof RpcResponse) {
             $result = $result->getData();
         } elseif (!is_array($result)) {
             $result = [$result];
         }
         $conn->callResult($id, $result);
         return;
     } elseif ($result === false) {
         $conn->callError($id, $topic, 'RPC Error', ['rpc' => $topic, 'params' => $params, 'request' => $request]);
     }
     $conn->callError($id, $topic, 'Unable to find that command', ['rpc' => $topic->getId(), 'params' => $params, 'request' => $request]);
     return;
 }
Exemplo n.º 2
0
 /**
  * This will receive any Subscription requests for this topic.
  *
  * @param ConnectionInterface $connection
  * @param Topic $topic
  * @param WampRequest $request
  * @return void
  */
 public function onSubscribe(ConnectionInterface $connection, Topic $topic, WampRequest $request)
 {
     $user = $this->refreshUserFromBase($this->clientManipulator->getClient($connection));
     if ($user && is_object($user)) {
         $name = $user->getDisplayName() ? $user->getDisplayName() : $user->getUsername();
         $topic->broadcast(['user' => null, 'request' => $request->getRoute()->getPattern(), 'msg' => $name . " a rejoint le chat."]);
     }
 }
Exemplo n.º 3
0
 /**
  * @param string              $calledMethod
  * @param ConnectionInterface $conn
  * @param Topic               $topic
  * @param null                $payload
  * @param null                $exclude
  * @param null                $eligible
  *
  * @return bool
  */
 public function dispatch($calledMethod, ConnectionInterface $conn, Topic $topic, WampRequest $request, $payload = null, $exclude = null, $eligible = null)
 {
     $dispatched = false;
     foreach ((array) $request->getRoute()->getCallback() as $callback) {
         $appTopic = $this->topicRegistry->getTopic($callback);
         if ($topic) {
             if ($appTopic instanceof TopicPeriodicTimerInterface) {
                 $appTopic->setPeriodicTimer($this->topicPeriodicTimer);
                 if (false === $this->topicPeriodicTimer->isRegistered($appTopic) && 0 !== count($topic)) {
                     $appTopic->registerPeriodicTimer($topic);
                 }
             }
             if ($calledMethod === static::UNSUBSCRIPTION && 0 === count($topic)) {
                 $this->topicPeriodicTimer->clearPeriodicTimer($appTopic);
             }
             try {
                 if ($payload) {
                     //its a publish call.
                     $appTopic->{$calledMethod}($conn, $topic, $request, $payload, $exclude, $eligible);
                 } else {
                     $appTopic->{$calledMethod}($conn, $topic, $request);
                 }
             } catch (\Exception $e) {
                 $this->logger->error($e->getMessage(), ['code' => $e->getCode(), 'file' => $e->getFile(), 'trace' => $e->getTraceAsString()]);
                 $conn->callError($topic->getId(), $topic, $e->getMessage(), ['topic' => $topic, 'request' => $request, 'event' => $calledMethod]);
                 return;
             }
             $dispatched = true;
         }
     }
     return $dispatched;
 }
 /**
  * @param string              $calledMethod
  * @param ConnectionInterface $conn
  * @param Topic               $topic
  * @param null                $payload
  * @param null                $exclude
  * @param null                $eligible
  *
  * @return bool
  */
 public function dispatch($calledMethod, ConnectionInterface $conn, Topic $topic, WampRequest $request, $payload = null, $exclude = null, $eligible = null)
 {
     $dispatched = false;
     foreach ((array) $request->getRoute()->getCallback() as $callback) {
         $appTopic = $this->topicRegistry->getTopic($callback);
         if ($topic) {
             try {
                 if ($payload) {
                     //its a publish call.
                     $appTopic->{$calledMethod}($conn, $topic, $request, $payload, $exclude, $eligible);
                 } else {
                     $appTopic->{$calledMethod}($conn, $topic, $request);
                 }
             } catch (\Exception $e) {
                 $this->logger->error($e->getMessage(), ['code' => $e->getCode(), 'file' => $e->getFile(), 'trace' => $e->getTraceAsString()]);
                 $conn->callError($topic->getId(), $topic, $e->getMessage(), ['topic' => $topic, 'request' => $request, 'event' => $calledMethod]);
                 return;
             }
             $dispatched = true;
         }
     }
     return $dispatched;
 }