/** * @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; }
/** * 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."]); } }
/** * @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; }