예제 #1
1
 /**
  * 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.
     */
 }
예제 #2
0
 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.']));
 }