private function check() { Logger::debug("Checking for new match (current matchs: " . count($this->matchs) . ")"); $sql = mysql_query("SELECT m.team_a_name as team_a_name, m.team_b_name as team_b_name, m.id as match_id, m.config_authkey as config_authkey, t_a.name as team_a, t_b.name as team_b, s.id as server_id, s.ip as server_ip, s.rcon as server_rcon FROM `matchs` m LEFT JOIN `servers` s ON s.id = m.server_id LEFT JOIN `teams` t_a ON t_a.id = m.team_a LEFT JOIN `teams` t_b ON t_b.id = m.team_b WHERE m.`status` >= " . Match::STATUS_STARTING . " AND m.`status` < " . Match::STATUS_END_MATCH . " AND m.`enable` = 1") or die(mysql_error()); while ($req = mysql_fetch_assoc($sql)) { if (!@$this->matchs[$req['server_ip']]) { try { $teamA = $this->getTeamDetails($req['team_a'], 'a', $req); $teamB = $this->getTeamDetails($req['team_a'], 'b', $req); Logger::log("New match detected - " . $teamA['name'] . " vs " . $teamB['name'] . " on " . $req['server_ip']); $this->newMatch($req["match_id"], $req['server_ip'], $req['server_rcon'], $req['config_authkey']); } catch (MatchException $ex) { Logger::error("Error while creating the match"); mysql_query("UPDATE `matchs` SET enable=0 WHERE id = '" . $req['match_id'] . "'") or die(mysql_error()); } catch (\Exception $ex) { if ($ex->getMessage() == "SERVER_BUSY") { Logger::error($req["server_ip"] . " is busy for " . (time() - $this->busyServers[$req['server_ip']])); } elseif ($ex->getMessage() == "MATCH_ALREADY_PLAY_ON_THIS_SERVER") { Logger::error("A match is already playing on " . $req["server_ip"]); } } } } TaskManager::getInstance()->addTask(new Task($this, self::CHECK_NEW_MATCH, microtime(true) + 3), true); Logger::debug("End checking (current matchs: " . count($this->matchs) . ")"); }
public function run() { global $loggerData; // Loading Logger instance Logger::getInstance(); Logger::log($this->getName()); // Initializing database $this->initDatabase(); // Loading eBot configuration Logger::log("Loading config"); Config::getInstance()->scanAdvertising(); Config::getInstance()->printConfig(); // Registring components Logger::log("Registering MatchManager"); MatchManager::getInstance(); Logger::log("Registering Messages"); MessageManager::createFromConfigFile(); Logger::log("Registering PluginsManager"); PluginsManager::getInstance(); // Starting application Logger::log("Starting eBot Application"); /* try { $this->socket = new Socket(Config::getInstance()->getBot_ip(), Config::getInstance()->getBot_port()); } catch (Exception $ex) { Logger::error("Unable to bind socket"); die(); } */ try { $this->websocket['match'] = new \WebSocket("ws://" . \eBot\Config\Config::getInstance()->getBot_ip() . ":" . \eBot\Config\Config::getInstance()->getBot_port() . "/match"); $this->websocket['match']->open(); $this->websocket['rcon'] = new \WebSocket("ws://" . \eBot\Config\Config::getInstance()->getBot_ip() . ":" . \eBot\Config\Config::getInstance()->getBot_port() . "/rcon"); $this->websocket['rcon']->open(); $this->websocket['logger'] = new \WebSocket("ws://" . \eBot\Config\Config::getInstance()->getBot_ip() . ":" . \eBot\Config\Config::getInstance()->getBot_port() . "/logger"); $this->websocket['logger']->open(); $this->websocket['livemap'] = new \WebSocket("ws://" . \eBot\Config\Config::getInstance()->getBot_ip() . ":" . \eBot\Config\Config::getInstance()->getBot_port() . "/livemap"); $this->websocket['livemap']->open(); $this->websocket['aliveCheck'] = new \WebSocket("ws://" . \eBot\Config\Config::getInstance()->getBot_ip() . ":" . \eBot\Config\Config::getInstance()->getBot_port() . "/alive"); $this->websocket['aliveCheck']->open(); } catch (Exception $ex) { Logger::error("Unable to create Websocket."); die; } PluginsManager::getInstance()->startAll(); $time = time(); while (true) { $data = ""; $ip = ""; $nbMessage = count($loggerData); if ($nbMessage > 0) { if ($nbMessage > 5) { Logger::log($nbMessage . " in queue!"); } $d = explode("---", $loggerData->shift()); $ip = array_shift($d); $data = implode("---", $d); $nbMessage--; } else { usleep(500); } //$data = $this->socket->recvfrom($ip); if ($data) { if (!preg_match("/L+\\s+\\d+\\/\\d+\\/\\d+/", $data)) { if ($data == '__true__') { $this->clientsConnected = true; } elseif ($data == '__false__') { $this->clientsConnected = false; } elseif ($data == '__aliveCheck__') { $this->websocket['aliveCheck']->sendData('__isAlive__'); } else { $data = json_decode($data, true); $authkey = \eBot\Manager\MatchManager::getInstance()->getAuthkey($data[1]); $text = \eTools\Utils\Encryption::decrypt($data[0], $authkey, 256); if ($text) { if (preg_match("!^(?<id>\\d+) stopNoRs (?<ip>\\d+\\.\\d+\\.\\d+\\.\\d+\\:\\d+)\$!", $text, $preg)) { $match = \eBot\Manager\MatchManager::getInstance()->getMatch($preg["ip"]); if ($match) { $reply = $match->adminStopNoRs(); if ($reply) { $send = json_encode(array('message' => 'button', 'content' => 'stop', 'id' => $preg["id"])); $this->websocket['match']->sendData($send); } } else { Logger::error($preg["ip"] . " is not managed !"); } } elseif (preg_match("!^(?<id>\\d+) stop (?<ip>\\d+\\.\\d+\\.\\d+\\.\\d+\\:\\d+)\$!", $text, $preg)) { $match = \eBot\Manager\MatchManager::getInstance()->getMatch($preg["ip"]); if ($match) { $reply = $match->adminStop(); if ($reply) { $send = json_encode(array('message' => 'button', 'content' => 'stop', 'id' => $preg["id"])); $this->websocket['match']->sendData($send); } } else { Logger::error($preg["ip"] . " is not managed !"); } } elseif (preg_match("!^(?<id>\\d+) executeCommand (?<ip>\\d+\\.\\d+\\.\\d+\\.\\d+\\:\\d+) (?<command>.*)\$!", $text, $preg)) { $match = \eBot\Manager\MatchManager::getInstance()->getMatch($preg["ip"]); if ($match) { $reply = $match->adminExecuteCommand($preg["command"]); if ($reply) { $send = json_encode(array('id' => $preg["id"], 'content' => $reply)); $this->websocket['rcon']->sendData($send); } } else { Logger::error($preg["ip"] . " is not managed !"); } } elseif (preg_match("!^(?<id>\\d+) passknife (?<ip>\\d+\\.\\d+\\.\\d+\\.\\d+\\:\\d+)\$!", $text, $preg)) { $match = \eBot\Manager\MatchManager::getInstance()->getMatch($preg["ip"]); if ($match) { $reply = $match->adminPassKnife(); if ($reply) { $send = json_encode(array('message' => 'button', 'content' => $match->getStatus(), 'id' => $preg["id"])); $this->websocket['match']->sendData($send); } } else { Logger::error($preg["ip"] . " is not managed !"); } } elseif (preg_match("!^(?<id>\\d+) forceknife (?<ip>\\d+\\.\\d+\\.\\d+\\.\\d+\\:\\d+)\$!", $text, $preg)) { $match = \eBot\Manager\MatchManager::getInstance()->getMatch($preg["ip"]); if ($match) { $reply = $match->adminForceKnife(); if ($reply) { $send = json_encode(array('message' => 'button', 'content' => $match->getStatus(), 'id' => $preg["id"])); $this->websocket['match']->sendData($send); } } else { Logger::error($preg["ip"] . " is not managed !"); } } elseif (preg_match("!^(?<id>\\d+) forceknifeend (?<ip>\\d+\\.\\d+\\.\\d+\\.\\d+\\:\\d+)\$!", $text, $preg)) { $match = \eBot\Manager\MatchManager::getInstance()->getMatch($preg["ip"]); if ($match) { $reply = $match->adminForceKnifeEnd(); if ($reply) { $send = json_encode(array('message' => 'button', 'content' => $match->getStatus(), 'id' => $preg["id"])); $this->websocket['match']->sendData($send); } } else { Logger::error($preg["ip"] . " is not managed !"); } } elseif (preg_match("!^(?<id>\\d+) forcestart (?<ip>\\d+\\.\\d+\\.\\d+\\.\\d+\\:\\d+)\$!", $text, $preg)) { $match = \eBot\Manager\MatchManager::getInstance()->getMatch($preg["ip"]); if ($match) { $reply = $match->adminForceStart(); if ($reply) { $send = json_encode(array('message' => 'button', 'content' => $match->getStatus(), 'id' => $preg["id"])); $this->websocket['match']->sendData($send); } } else { Logger::error($preg["ip"] . " is not managed !"); } } elseif (preg_match("!^(?<id>\\d+) stopback (?<ip>\\d+\\.\\d+\\.\\d+\\.\\d+\\:\\d+)\$!", $text, $preg)) { $match = \eBot\Manager\MatchManager::getInstance()->getMatch($preg["ip"]); if ($match) { $reply = $match->adminStopBack(); if ($reply) { $send = json_encode(array('message' => 'button', 'content' => $match->getStatus(), 'id' => $preg["id"])); $this->websocket['match']->sendData($send); } } else { Logger::error($preg["ip"] . " is not managed !"); } } elseif (preg_match("!^(?<id>\\d+) pauseunpause (?<ip>\\d+\\.\\d+\\.\\d+\\.\\d+\\:\\d+)\$!", $text, $preg)) { $match = \eBot\Manager\MatchManager::getInstance()->getMatch($preg["ip"]); if ($match) { $reply = $match->adminPauseUnpause(); if ($reply) { $send = json_encode(array('message' => 'button', 'content' => $match->getStatus(), 'id' => $preg["id"])); $this->websocket['match']->sendData($send); } } else { Logger::error($preg["ip"] . " is not managed !"); } } elseif (preg_match("!^(?<id>\\d+) fixsides (?<ip>\\d+\\.\\d+\\.\\d+\\.\\d+\\:\\d+)\$!", $text, $preg)) { $match = \eBot\Manager\MatchManager::getInstance()->getMatch($preg["ip"]); if ($match) { $reply = $match->adminFixSides(); if ($reply) { $send = json_encode(array('message' => 'button', 'content' => $match->getStatus(), 'id' => $preg["id"])); $this->websocket['match']->sendData($send); } } else { Logger::error($preg["ip"] . " is not managed !"); } } elseif (preg_match("!^(?<id>\\d+) streamerready (?<ip>\\d+\\.\\d+\\.\\d+\\.\\d+\\:\\d+)\$!", $text, $preg)) { $match = \eBot\Manager\MatchManager::getInstance()->getMatch($preg["ip"]); if ($match) { $reply = $match->adminStreamerReady(); if ($reply) { $send = json_encode(array('message' => 'button', 'content' => $match->getStatus(), 'id' => $preg["id"])); $this->websocket['match']->sendData($send); } } else { Logger::error($preg["ip"] . " is not managed !"); } } elseif (preg_match("!^(?<id>\\d+) goBackRounds (?<ip>\\d+\\.\\d+\\.\\d+\\.\\d+\\:\\d+) (?<round>\\d+)\$!", $text, $preg)) { $match = \eBot\Manager\MatchManager::getInstance()->getMatch($preg["ip"]); if ($match) { $reply = $match->adminGoBackRounds($preg['round']); if ($reply) { $send = json_encode(array('message' => 'button', 'content' => $match->getStatus(), 'id' => $preg["id"])); $this->websocket['match']->sendData($send); } } else { Logger::error($preg["ip"] . " is not managed !"); } } elseif (preg_match("!^(?<id>\\d+) skipmap (?<ip>\\d+\\.\\d+\\.\\d+\\.\\d+\\:\\d+)\$!", $text, $preg)) { $match = \eBot\Manager\MatchManager::getInstance()->getMatch($preg["ip"]); if ($match) { $reply = $match->adminSkipMap(); /* if ($reply) { $send = json_encode(array('message' => 'button', 'content' => 'stop', 'id' => $preg["id"])); $this->websocket['match']->sendData($send); } */ } else { Logger::error($preg["ip"] . " is not managed !"); } } else { Logger::error($text . " not managed"); } } } } else { $line = substr($data, 7); if (\eBot\Manager\MatchManager::getInstance()->getMatch($ip)) { file_put_contents(APP_ROOT . "/logs/{$ip}", $line, FILE_APPEND); $line = trim(substr($line, 23)); \eBot\Manager\MatchManager::getInstance()->getMatch($ip)->processMessage($line); $line = substr($data, 7, strlen($data) - 8); file_put_contents(Logger::getInstance()->getLogPathAdmin() . "/logs_" . \eBot\Manager\MatchManager::getInstance()->getMatch($ip)->getMatchId() . ".log", $line, FILE_APPEND); if ($this->clientsConnected) { $send = json_encode(array('id' => \eBot\Manager\MatchManager::getInstance()->getMatch($ip)->getMatchId(), 'content' => $line)); $this->websocket['logger']->sendData($send); } } } } if ($time + 5 < time()) { $time = time(); $this->websocket['match']->send(json_encode(array("message" => "ping"))); $this->websocket['logger']->send(json_encode(array("message" => "ping"))); $this->websocket['rcon']->send(json_encode(array("message" => "ping"))); $this->websocket['livemap']->send(json_encode(array("message" => "ping"))); $this->websocket['aliveCheck']->send(json_encode(array("message" => "ping"))); } if ($nbMessage < 100) { \eBot\Manager\MatchManager::getInstance()->sendPub(); \eTools\Task\TaskManager::getInstance()->runTask(); } } }
public function run() { // Loading Logger instance Logger::getInstance(); Logger::getInstance()->setName("#0"); Logger::log($this->getName()); // Loading eBot configuration Logger::log("Loading config"); Config::getInstance()->printConfig(); // Initializing database $this->initDatabase(); // Registring components Logger::log("Registering MatchManagerServer"); MatchManagerServer::getInstance(); Logger::log("Registering Messages"); MessageManager::createFromConfigFile(); Logger::log("Registering PluginsManager"); PluginsManager::getInstance(); Logger::log("Spawning instance"); $config = parse_ini_file(APP_ROOT . DIRECTORY_SEPARATOR . "config" . DIRECTORY_SEPARATOR . "config.server.ini"); $instance = 1; if (is_numeric($config['NUMBER'])) { $instance = $config['NUMBER']; } for ($i = 1; $i <= $instance; $i++) { $descriptorspec = array(0 => STDIN, 1 => STDOUT, 2 => STDOUT); $process = proc_open(PHP_BINDIR . '/php ' . EBOT_DIRECTORY . '/bootstrap_client.php ' . $i, $descriptorspec, $pipes); $status = proc_get_status($process); $this->instance[] = $process; Logger::log("Spawned instance " . $status['pid']); } // Starting application Logger::log("Starting eBot Application"); try { $this->socket = new Socket(Config::getInstance()->getBot_ip(), Config::getInstance()->getBot_port()); } catch (Exception $ex) { Logger::error("Unable to bind socket"); die; } try { $this->websocket['match'] = new \WebSocket("ws://" . \eBot\Config\Config::getInstance()->getBot_ip() . ":" . \eBot\Config\Config::getInstance()->getBot_port() . "/match"); $this->websocket['match']->open(); $this->websocket['rcon'] = new \WebSocket("ws://" . \eBot\Config\Config::getInstance()->getBot_ip() . ":" . \eBot\Config\Config::getInstance()->getBot_port() . "/rcon"); $this->websocket['rcon']->open(); $this->websocket['logger'] = new \WebSocket("ws://" . \eBot\Config\Config::getInstance()->getBot_ip() . ":" . \eBot\Config\Config::getInstance()->getBot_port() . "/logger"); $this->websocket['logger']->open(); $this->websocket['livemap'] = new \WebSocket("ws://" . \eBot\Config\Config::getInstance()->getBot_ip() . ":" . \eBot\Config\Config::getInstance()->getBot_port() . "/livemap"); $this->websocket['livemap']->open(); $this->websocket['aliveCheck'] = new \WebSocket("ws://" . \eBot\Config\Config::getInstance()->getBot_ip() . ":" . \eBot\Config\Config::getInstance()->getBot_port() . "/alive"); $this->websocket['aliveCheck']->open(); } catch (Exception $ex) { Logger::error("Unable to create Websocket."); die; } PluginsManager::getInstance()->startAll(); $time = time(); while (true) { $data = $this->socket->recvfrom($ip); if ($data) { if (!preg_match("/L+\\s+\\d+\\/\\d+\\/\\d+/", $data)) { if ($data == '__true__') { $this->clientsConnected = true; for ($i = 1; $i <= count($this->instance); $i++) { $this->socket->sendto($data, \eBot\Config\Config::getInstance()->getBot_ip(), \eBot\Config\Config::getInstance()->getBot_port() + $i); } } elseif ($data == '__false__') { $this->clientsConnected = false; for ($i = 1; $i <= count($this->instance); $i++) { $this->socket->sendto($data, \eBot\Config\Config::getInstance()->getBot_ip(), \eBot\Config\Config::getInstance()->getBot_port() + $i); } } elseif ($data == '__aliveCheck__') { $this->websocket['aliveCheck']->sendData('__isAlive__'); for ($i = 1; $i <= count($this->instance); $i++) { $this->socket->sendto($data, \eBot\Config\Config::getInstance()->getBot_ip(), \eBot\Config\Config::getInstance()->getBot_port() + $i); } } elseif (preg_match("!^removeMatch (?<id>\\d+)\$!", $data, $preg)) { Logger::log("Removing " . $preg['id']); MatchManagerServer::getInstance()->removeMatch($preg['id']); } else { $origData = $data; $data = json_decode($data, true); $authkey = \eBot\Manager\MatchManagerServer::getInstance()->getAuthkey($data[1]); $text = \eTools\Utils\Encryption::decrypt($data[0], $authkey, 256); if ($text) { if (preg_match("!^(?<id>\\d+) stopNoRs (?<ip>\\d+\\.\\d+\\.\\d+\\.\\d+\\:\\d+)\$!", $text, $preg)) { $match = \eBot\Manager\MatchManagerServer::getInstance()->getMatch($preg["ip"]); if ($match) { $this->socket->sendto($origData, \eBot\Config\Config::getInstance()->getBot_ip(), \eBot\Config\Config::getInstance()->getBot_port() + $match['i']); } else { Logger::error($preg["ip"] . " is not managed !"); } } elseif (preg_match("!^(?<id>\\d+) stop (?<ip>\\d+\\.\\d+\\.\\d+\\.\\d+\\:\\d+)\$!", $text, $preg)) { $match = \eBot\Manager\MatchManagerServer::getInstance()->getMatch($preg["ip"]); if ($match) { $this->socket->sendto($origData, \eBot\Config\Config::getInstance()->getBot_ip(), \eBot\Config\Config::getInstance()->getBot_port() + $match['i']); } else { Logger::error($preg["ip"] . " is not managed !"); } } elseif (preg_match("!^(?<id>\\d+) executeCommand (?<ip>\\d+\\.\\d+\\.\\d+\\.\\d+\\:\\d+) (?<command>.*)\$!", $text, $preg)) { $match = \eBot\Manager\MatchManagerServer::getInstance()->getMatch($preg["ip"]); if ($match) { $this->socket->sendto($origData, \eBot\Config\Config::getInstance()->getBot_ip(), \eBot\Config\Config::getInstance()->getBot_port() + $match['i']); } else { Logger::error($preg["ip"] . " is not managed !"); } } elseif (preg_match("!^(?<id>\\d+) passknife (?<ip>\\d+\\.\\d+\\.\\d+\\.\\d+\\:\\d+)\$!", $text, $preg)) { $match = \eBot\Manager\MatchManagerServer::getInstance()->getMatch($preg["ip"]); if ($match) { $this->socket->sendto($origData, \eBot\Config\Config::getInstance()->getBot_ip(), \eBot\Config\Config::getInstance()->getBot_port() + $match['i']); } else { Logger::error($preg["ip"] . " is not managed !"); } } elseif (preg_match("!^(?<id>\\d+) forceknife (?<ip>\\d+\\.\\d+\\.\\d+\\.\\d+\\:\\d+)\$!", $text, $preg)) { $match = \eBot\Manager\MatchManagerServer::getInstance()->getMatch($preg["ip"]); if ($match) { $this->socket->sendto($origData, \eBot\Config\Config::getInstance()->getBot_ip(), \eBot\Config\Config::getInstance()->getBot_port() + $match['i']); } else { Logger::error($preg["ip"] . " is not managed !"); } } elseif (preg_match("!^(?<id>\\d+) forceknifeend (?<ip>\\d+\\.\\d+\\.\\d+\\.\\d+\\:\\d+)\$!", $text, $preg)) { $match = \eBot\Manager\MatchManagerServer::getInstance()->getMatch($preg["ip"]); if ($match) { $this->socket->sendto($origData, \eBot\Config\Config::getInstance()->getBot_ip(), \eBot\Config\Config::getInstance()->getBot_port() + $match['i']); } else { Logger::error($preg["ip"] . " is not managed !"); } } elseif (preg_match("!^(?<id>\\d+) forcestart (?<ip>\\d+\\.\\d+\\.\\d+\\.\\d+\\:\\d+)\$!", $text, $preg)) { $match = \eBot\Manager\MatchManagerServer::getInstance()->getMatch($preg["ip"]); if ($match) { $this->socket->sendto($origData, \eBot\Config\Config::getInstance()->getBot_ip(), \eBot\Config\Config::getInstance()->getBot_port() + $match['i']); } else { Logger::error($preg["ip"] . " is not managed !"); } } elseif (preg_match("!^(?<id>\\d+) stopback (?<ip>\\d+\\.\\d+\\.\\d+\\.\\d+\\:\\d+)\$!", $text, $preg)) { $match = \eBot\Manager\MatchManagerServer::getInstance()->getMatch($preg["ip"]); if ($match) { $this->socket->sendto($origData, \eBot\Config\Config::getInstance()->getBot_ip(), \eBot\Config\Config::getInstance()->getBot_port() + $match['i']); } else { Logger::error($preg["ip"] . " is not managed !"); } } elseif (preg_match("!^(?<id>\\d+) pauseunpause (?<ip>\\d+\\.\\d+\\.\\d+\\.\\d+\\:\\d+)\$!", $text, $preg)) { $match = \eBot\Manager\MatchManagerServer::getInstance()->getMatch($preg["ip"]); if ($match) { $this->socket->sendto($origData, \eBot\Config\Config::getInstance()->getBot_ip(), \eBot\Config\Config::getInstance()->getBot_port() + $match['i']); } else { Logger::error($preg["ip"] . " is not managed !"); } } elseif (preg_match("!^(?<id>\\d+) fixsides (?<ip>\\d+\\.\\d+\\.\\d+\\.\\d+\\:\\d+)\$!", $text, $preg)) { $match = \eBot\Manager\MatchManagerServer::getInstance()->getMatch($preg["ip"]); if ($match) { $this->socket->sendto($origData, \eBot\Config\Config::getInstance()->getBot_ip(), \eBot\Config\Config::getInstance()->getBot_port() + $match['i']); } else { Logger::error($preg["ip"] . " is not managed !"); } } elseif (preg_match("!^(?<id>\\d+) streamerready (?<ip>\\d+\\.\\d+\\.\\d+\\.\\d+\\:\\d+)\$!", $text, $preg)) { $match = \eBot\Manager\MatchManagerServer::getInstance()->getMatch($preg["ip"]); if ($match) { $this->socket->sendto($origData, \eBot\Config\Config::getInstance()->getBot_ip(), \eBot\Config\Config::getInstance()->getBot_port() + $match['i']); } else { Logger::error($preg["ip"] . " is not managed !"); } } elseif (preg_match("!^(?<id>\\d+) goBackRounds (?<ip>\\d+\\.\\d+\\.\\d+\\.\\d+\\:\\d+) (?<round>\\d+)\$!", $text, $preg)) { $match = \eBot\Manager\MatchManagerServer::getInstance()->getMatch($preg["ip"]); if ($match) { $this->socket->sendto($origData, \eBot\Config\Config::getInstance()->getBot_ip(), \eBot\Config\Config::getInstance()->getBot_port() + $match['i']); } else { Logger::error($preg["ip"] . " is not managed !"); } } else { Logger::error($text . " not managed"); } } } } } if ($time + 5 < time()) { $time = time(); $this->websocket['match']->send(json_encode(array("message" => "ping"))); $this->websocket['logger']->send(json_encode(array("message" => "ping"))); $this->websocket['rcon']->send(json_encode(array("message" => "ping"))); $this->websocket['livemap']->send(json_encode(array("message" => "ping"))); $this->websocket['aliveCheck']->send(json_encode(array("message" => "ping"))); } \eTools\Task\TaskManager::getInstance()->runTask(); } }
public function adminGoBackRounds($round) { $this->enable = false; $sql = mysql_query("SELECT * FROM round_summary WHERE match_id = '" . $this->match_id . "' AND map_id = '" . $this->currentMap->getMapId() . "' AND round_id = {$round}"); $req = mysql_fetch_array($sql); $backup = $req['backup_file_name']; $this->addLog("Admin backup round {$round}"); $this->addLog("Backup file " . $backup); $this->stop["ct"] = false; $this->stop["t"] = false; if ($this->isPaused) { if (\eBot\Config\Config::getInstance()->getPauseMethod() == "nextRound") { $this->rcon->send("mp_unpause_match"); } else { $this->rcon->send("pause"); } $this->isPaused = false; $this->addLog("Disabling pause"); \mysql_query("UPDATE `matchs` SET `is_paused` = '0' WHERE `id` = '" . $this->match_id . "'"); $this->websocket['match']->sendData(json_encode(array('message' => 'status', 'content' => 'is_unpaused', 'id' => $this->match_id))); } $this->rcon->send("mp_unpause_match"); $this->score["team_a"] = $req['score_a']; $this->score["team_b"] = $req['score_b']; @mysql_query("UPDATE `matchs` SET score_a = '" . $this->score["team_a"] . "', score_b ='" . $this->score["team_b"] . "' WHERE id='" . $this->match_id . "'"); // To check with overtime if ($this->score["team_a"] + $this->score["team_b"] < $this->matchData["max_round"]) { $score = $this->currentMap->getCurrentScore(); if ($score != null) { $score->setScore1Side1($this->score['team_a']); $score->setScore2Side1($this->score['team_b']); $score->setScore1Side2(0); $score->setScore2Side2(0); $score->saveScore(); } $this->currentMap->calculScores(); } else { $score = $this->currentMap->getCurrentScore(); if ($score != null) { $score->setScore1Side2($this->score['team_a'] - $score->getScore1Side1()); $score->setScore2Side2($this->score['team_b'] - $score->getScore2Side1()); $score->saveScore(); } $this->currentMap->calculScores(); } // Sending roundbackup format file $this->rcon->send("mp_backup_round_file \"ebot_" . $this->match_id . "\""); // Prevent the halftime pausetimer $this->rcon->send("mp_halftime_pausetimer 0"); // Sending restore $this->rcon->send("mp_backup_restore_load_file " . $backup); // Prevent a bug for double stop $this->rcon->send("mp_backup_round_file_last " . $backup); foreach ($this->players as &$player) { $player->restoreSnapshot($this->getNbRound() - 1); } // Determine status $status = false; $total = $this->score["team_a"] + $this->score["team_b"]; if ($total < $this->matchData["max_round"]) { $status = self::STATUS_FIRST_SIDE; $statusMap = Map::STATUS_FIRST_SIDE; } elseif ($total < $this->matchData["max_round"] * 2) { $status = self::STATUS_SECOND_SIDE; $statusMap = Map::STATUS_SECOND_SIDE; } else { if ($this->config_ot) { $total -= $this->matchData["max_round"] * 2; $total_rest = $total % $this->ot_maxround * 2; if ($total_rest < $this->ot_maxround) { $status = self::STATUS_OT_FIRST_SIDE; $statusMap = Map::STATUS_OT_FIRST_SIDE; } else { $status = self::STATUS_OT_SECOND_SIDE; $statusMap = Map::STATUS_OT_SECOND_SIDE; } } } if ($status && $this->getStatus() != $status) { $this->addLog("Setting match to another status: " . $status); switch ($this->getStatus()) { case self::STATUS_SECOND_SIDE: if ($status == self::STATUS_FIRST_SIDE) { $this->addLog("Swapping teams !"); $this->swapSides(); } break; case self::STATUS_OT_FIRST_SIDE: if ($status == self::STATUS_FIRST_SIDE) { $this->addLog("Swapping teams !"); $this->swapSides(); } break; case self::STATUS_OT_SECOND_SIDE: if ($status == self::STATUS_OT_FIRST_SIDE) { $this->addLog("Swapping teams !"); $this->swapSides(); } if ($status == self::STATUS_SECOND_SIDE) { $this->addLog("Swapping teams !"); $this->swapSides(); } break; } $this->setStatus($status, true); $this->currentMap->setStatus($statusMap, true); } $this->say("Round restored, going live !"); \mysql_query("UPDATE `matchs` SET ingame_enable = 1 WHERE id='" . $this->match_id . "'") or $this->addLog("Can't update ingame_enable", Logger::ERROR); TaskManager::getInstance()->addTask(new Task($this, self::SET_LIVE, microtime(true) + 2)); return true; }
public function taskExecute($name) { if ($name == "check") { mysql_query("SELECT 1;"); TaskManager::getInstance()->addTask(new Task($this, self::CHECK_SQL, microtime(true) + 5), true); } }