Ejemplo n.º 1
0
 /**
  * User connection request
  * Will be triggered when the user open the fight page
  * @param ConnectionInterface $from
  * @param $data
  */
 public function connectRequest(ConnectionInterface $from, $data)
 {
     $fight = $this->manager->getFight($data->fight);
     $user = FightUser::find()->where('fight_id = :id AND user_id = :user', [':id' => $data->fight, ':user' => $data->user])->one();
     // Add connected player
     $p = $fight->getPlayer($data->index);
     $isReconnect = !$p->isNew();
     if (!$isReconnect) {
         $fight->addPlayer($data->index, $from, $user, $data->index);
     } else {
         $p->connect($from);
     }
     // Set user data to manager. Will be used for disconnecting
     $this->manager->addClient($from, ['user' => $data->user, 'fight' => $data->fight, 'index' => $data->index]);
     // Log user connection event
     $this->manager->log("User ({$from->resourceId}) has been " . (!$isReconnect ? 'connected' : 'reconnected') . " to fight {$data->fight}");
     // Send message about connecting
     $player = $fight->getPlayer($data->index);
     foreach ($fight->getPlayers() as $p) {
         $response = (new Response())->setAction('message')->setText($player->getName() . ' присоединился к игре');
         $p->send($response);
     }
     if (!$player->isOwner() && !$isReconnect) {
         $fight->start();
         $response = (new Response())->setAction('connect')->setId($data->user);
         $fight->getOpponent($data->index)->send($response);
     }
     if ($isReconnect && $fight->isFull()) {
         $fight->getPlayer(1)->startTimer();
         $response = (new Response())->setAction('reconnect')->setPlayers($fight->getPlayers())->setFight($fight)->setIds(true);
         $player->send($response);
     }
 }