Esempio n. 1
0
 /**
  * Creating fight
  * @return bool
  */
 public function create()
 {
     if (!$this->validate()) {
         return false;
     }
     $transaction = Yii::$app->getDb()->beginTransaction();
     $saved = false;
     try {
         $fight = new Fight();
         if ($fight->save()) {
             $fightOwner = new FightUser(['user_id' => Yii::$app->getUser()->getIdentity()->cid, 'deck_id' => $this->deck_id, 'is_owner' => 1, 'fight_id' => $fight->id]);
             if ($fightOwner->save()) {
                 $saved = true;
                 $this->_fight = $fight;
             }
         }
     } catch (Exception $e) {
         $transaction->rollback();
     }
     if ($saved) {
         $transaction->commit();
     } else {
         $transaction->rollback();
     }
     return $saved;
 }
Esempio n. 2
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);
     }
 }
Esempio n. 3
0
 /**
  * @return string
  */
 public function actionIndex()
 {
     $query = Fight::find();
     $fu = FightUser::tableName();
     $query->join('LEFT JOIN', $fu, $fu . '.fight_id = ' . Fight::tableName() . '.id AND ' . $fu . '.user_id = ' . \Yii::$app->user->getIdentity()->cid);
     $query->where($fu . '.id IS NULL');
     $query->orderBy('created_at DESC');
     $items = new ActiveDataProvider(['query' => $query, 'sort' => false]);
     return $this->render('index', ['items' => $items, 'model' => new FightForm()]);
 }
Esempio n. 4
0
File: Deck.php Progetto: h11Nox/slug
 /**
  * @return \yii\db\ActiveQuery
  */
 public function getFightUsers()
 {
     return $this->hasMany(FightUser::className(), ['deck_id' => 'id']);
 }
Esempio n. 5
0
 /**
  * Connect
  * @return bool
  */
 public function connect()
 {
     $this->updateAttributes(['status' => self::STATUS_CONNECTED]);
     $fightUser = new FightUser(['fight_id' => $this->id, 'deck_id' => $this->owner->deck_id, 'is_owner' => 0, 'user_id' => Yii::$app->user->getIdentity()->cid]);
     return $fightUser->save();
 }