Пример #1
0
 /**
  * @param string $json
  *
  * @return Board
  * @throws \Exception
  */
 public function fromJson($json)
 {
     $contestantFactory = new ContestantFactory();
     $values = json_decode($json);
     $contestants = (new Collection($values->contestants))->map([$contestantFactory, 'createFromObject']);
     $categories = array_map(function (\stdClass $category) {
         return new Category($category->name, array_map(function (\stdClass $question) {
             $questionObj = new Question(new Clue($question->clue), new Answer($question->answer), $question->value, $question->daily_double ?? false, $question->type ?? Question::CLUE_TYPE_DEFAULT);
             if (isset($question->used) && $question->used || $questionObj->getClue() === null) {
                 $questionObj->setUsed(true);
             }
             return $questionObj;
         }, $category->questions));
     }, $values->categories);
     if (!isset($values->final)) {
         throw new \Exception('Final Jeopardy is not defined in your questions file');
     }
     $finalJeopardyClue = new FinalJeopardyClue($values->final->category, $values->final->clue, $values->final->answer);
     $finalJeopardyState = new State($finalJeopardyClue, $contestants->map(function (Contestant $contestant) {
         return $contestant->getName();
     })->toArray());
     $board = new Board($contestants, $categories, new Resolver(), new BuzzerStatus(), $finalJeopardyState);
     return $board;
 }
Пример #2
0
 /**
  * An admin has filled in the value that a user wants to bet on the daily double. We will let the clients know
  * that they can display the actual question text now.
  *
  * @param Question $question
  * @param $category
  * @param $bet
  */
 public function onDailyDoubleBetRecieved(Question $question, $category, $bet)
 {
     if (!array_key_exists(self::DAILY_DOUBLE_BET_TOPIC, $this->subscribedTopics)) {
         return;
     }
     $response = $question->toArray();
     $response['category'] = $category;
     $response['bet'] = $bet;
     $response = json_encode($response);
     $this->subscribedTopics[self::DAILY_DOUBLE_BET_TOPIC]->broadcast($response);
 }