/** * This will receive any Publish requests for this topic. * * @param ConnectionInterface $connection * @param Topic $topic * @param WampRequest $request * @param $event * @param array $exclude * @param array $eligible * * @return mixed|void */ public function onPublish(ConnectionInterface $connection, Topic $topic, WampRequest $request, $event, array $exclude, array $eligible) { if ($event['event'] && $event['event'] == 'move') { $cardHelper = new CardHelper($this->em); try { $moveResult = $cardHelper->moveCard($event['userId'], $event['gameId'], $event['cardId']); if ($moveResult['result'] == CardHelper::MOVED_SUCCESSFULLY) { /** @var Game[] $games */ $games = $this->em->getRepository('AppBundle:Game')->createQueryBuilder('game')->select('game, users')->join('game.users', 'users')->where("game.id = {$moveResult['data']}")->getQuery()->getArrayResult(); $topic->broadcast(['msg' => ['game' => $games[0] ? $games[0] : []]]); } else { if ($moveResult['result'] == CardHelper::MOVED_FAIL_BY_TURN) { $topic->broadcast(['msg' => 'Not your turn.']); } else { $topic->broadcast(['msg' => 'Error.']); } } } catch (EntityNotFoundException $ex) { $topic->broadcast(['msg' => $ex->getMessage()]); } } if ($event['event'] && $event['event'] == 'pass') { $gameHelper = new GameHelper(); $passResult = $gameHelper->pass($this->em, $event['userId'], $event['gameId']); if ($passResult['result'] == GameHelper::PASSED_SUCCESSFULLY) { /** @var Game[] $games */ $games = $this->em->getRepository('AppBundle:Game')->createQueryBuilder('game')->select('game, users')->join('game.users', 'users')->where("game.id = {$passResult['data']}")->getQuery()->getArrayResult(); $topic->broadcast(['msg' => ['game' => $games[0] ? $games[0] : []]]); } else { if ($passResult['result'] == GameHelper::PASSED_UNSUCCESSFULLY) { $topic->broadcast(['msg' => 'You can not pass.']); } } } /* $topic->getId() will contain the FULL requested uri, so you can proceed based on that if ($topic->getId() === 'game/channel/shout') //shout something to all subs. */ }
public function acceptAction($id) { $response = new Response(); /** @var EntityManager $em */ $em = $this->getDoctrine()->getManager(); /** @var UserRepository $userRepository */ $userRepository = $em->getRepository('AppBundle\\Entity\\User'); /** @var GameRepository $gameRepository */ $gameRepository = $em->getRepository('AppBundle\\Entity\\Game'); /** @var User $user */ $user = $userRepository->loadUserByUsername($this->getUser()->getUsername()); /** @var Game $game */ $game = $gameRepository->find($id); if (!$game) { return $response->setContent(json_encode(['errorMessage' => 'Game not found.'])); } if ($game->getIsAccepted()) { return $response->setContent(json_encode(['errorMessage' => 'Game is already busy.'])); } /** @var User[] $users */ $users = $game->getUsers(); $game->setJson(Helper\GameHelper::generate($em, $users[0]->getId(), $user->getId())); $game->addUser($user); $game->setIsAccepted(true); $user->addGame($game); $em->flush(); return $response->setContent(json_encode(['message' => 'Game successfully accepted.'])); }