From f52436a76027fbc3776c2ebf7f375c85ffdbea33 Mon Sep 17 00:00:00 2001 From: Janzert Date: Tue, 6 Dec 2016 03:47:00 -0500 Subject: [PATCH 01/11] Check if high sigma player is already in a game. --- website/api/manager/ManagerAPI.php | 22 +++++++++++++++++++++- website/sql/schema.sql | 28 ++++++++++++++++++++++++++++ worker/backend.py | 4 ++-- worker/worker.py | 9 ++++++--- 4 files changed, 57 insertions(+), 6 deletions(-) diff --git a/website/api/manager/ManagerAPI.php b/website/api/manager/ManagerAPI.php index 9e452ebea..d6ee9408a 100644 --- a/website/api/manager/ManagerAPI.php +++ b/website/api/manager/ManagerAPI.php @@ -65,6 +65,13 @@ private function getTrueskillMatchQuality($rankingValues) { return floatval($lines[0]); } + private function clearPairing() { + if(isset($_POST['pairingID'])) { + $pairingID = $_POST['pairingID']; + $this->insert("DELETE FROM PairingUser WHERE pairingID={$pairingID}"); + $this->insert("DELETE FROM Pairing WHERE gameID={$pairingID}"); + } + } /////////////////////////API ENDPOINTS\\\\\\\\\\\\\\\\\\\\\\\\\\\\ @@ -88,7 +95,7 @@ protected function task() { $seedPlayer = null; $randValue = mt_rand() / mt_getrandmax(); if($randValue > 0.5) { - $seedPlayer = $this->select("SELECT * FROM User WHERE isRunning = 1 order by rand()*-pow(sigma, 2) LIMIT 1"); + $seedPlayer = $this->select("SELECT u.* FROM (SELECT MAX(p.timestamp) as maxTime, pu.userID as userID from PairingUser pu INNER JOIN Pairing p ON p.pairingID = pu.pairingID GROUP BY pu.userID) temptable INNER JOIN User u on u.userID = temptable.userID WHERE maxTime < DATE_SUB(NOW(), INTERVAL 10 MINUTE) AND isRunning = 1 order by rand()*-pow(sigma, 2) LIMIT 1"); } if ($randValue > 0.25 && $randValue <= 0.5) { $seedPlayer = $this->select("SELECT * FROM (SELECT u.* FROM (SELECT MAX(g.timestamp) as maxTime, gu.userID as userID FROM GameUser gu INNER JOIN Game g ON g.gameID=gu.gameID GROUP BY gu.userID) temptable INNER JOIN User u on u.userID = temptable.userID where numGames < 400 order by maxTime ASC limit 15) orderedTable order by rand() limit 1;"); @@ -105,6 +112,16 @@ protected function task() { $sizes = array(20, 25, 25, 30, 30, 30, 35, 35, 35, 35, 40, 40, 40, 45, 45, 50); $size = $sizes[array_rand($sizes)]; + // Record pairing + $worker = $this->select("SELECT * FROM Worker WHERE apiKey=".$this->mysqli->real_escape_string($this->apiKey)." LIMIT 1"); + $this->insert("INSERT INTO Pairing (workerID) VALUES (".$worker["workerID"].")"); + $pairing = $this->select("SELECT * FROM Pairing WHERE workerID=".$worker["workerID"]." ORDER BY pairingID DESC LIMIT 1"); + $playerInsert = "INSERT INTO PairingUser (pairingID, userID) VALUES "; + foreach($players as $player) { + $playerInsert .= "(".$pairing["pairingID"].", ".$player["userID"]."),"; + } + $this.insert($playerInsert); + // Send game task if(count($players) == $numPlayers) { return array( @@ -162,6 +179,7 @@ protected function game() { $storedUser = $this->select("SELECT * FROM User WHERE userID=".$this->mysqli->real_escape_string($user->userID)); array_push($storedUsers, $storedUser); if(intval($storedUser['numSubmissions']) != intval($user->numSubmissions)) { + $this->clearPairing(); return null; } } @@ -261,6 +279,8 @@ protected function game() { $rank = $userIndex+1; $this->insert("UPDATE User SET rank={$rank} WHERE userID={$allUsers[$userIndex]['userID']}"); } + + $this->clearPairing(); } } diff --git a/website/sql/schema.sql b/website/sql/schema.sql index 3adcbc787..15ed613d3 100644 --- a/website/sql/schema.sql +++ b/website/sql/schema.sql @@ -53,6 +53,34 @@ CREATE TABLE `GameUser` ( ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; +-- +-- Table structure for table `Pairing` +-- + +DROP TABLE IF EXISTS `Pairing`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `Pairing` ( + `pairingID` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `workerID` mediumint(8) unsigned NOT NULL, + `timestamp` datetime DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`pairingID`) +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `PairingUser` +-- + +DROP TABLE IF EXISTS `PairingUser`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `PairingUser` ( + `pairingID` mediumint(8) unsigned NOT NULL, + `userID` mediumint(8) unsigned NOT NULL, +) ENGINE=InnoDB DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + -- -- Table structure for table `User` -- diff --git a/worker/backend.py b/worker/backend.py index 52d043d19..8d854e3b2 100644 --- a/worker/backend.py +++ b/worker/backend.py @@ -89,11 +89,11 @@ def compileResult(userID, didCompile, language, errors=None): print("Posting compile result") print(r.text) -def gameResult(width, height, users, replayPath, errorPaths): +def gameResult(pairID, width, height, users, replayPath, errorPaths): """Posts the result of a game task""" files = {os.path.basename(replayPath): open(replayPath, "rb").read()} for path in errorPaths: files[os.path.basename(path)] = open(path, "rb").read() - r = requests.post(MANAGER_URL+"game", data={"apiKey": API_KEY, "mapWidth": str(width), "mapHeight": str(height), "users": json.dumps(users)}, files=files) + r = requests.post(MANAGER_URL+"game", data={"apiKey": API_KEY, "pairingID": pairID, "mapWidth": str(width), "mapHeight": str(height), "users": json.dumps(users)}, files=files) print("Posting game result:") print(r.text) diff --git a/worker/worker.py b/worker/worker.py index 2a0dd7745..bdf2c2226 100644 --- a/worker/worker.py +++ b/worker/worker.py @@ -157,8 +157,11 @@ def parseGameOutput(output, users): return users, replayPath, errorPaths -def executeGameTask(width, height, users, backend): +def executeGameTask(gameTask, backend): """Downloads compiled bots, runs a game, and posts the results of the game""" + width = int(gameTask["width"]) + height = int(gameTask["height"]) + users = gameTask["users"] print("Running game with width %d, height %d, and users %s" % (width, height, str(users))) downloadUsers(users) @@ -171,7 +174,7 @@ def executeGameTask(width, height, users, backend): fIn.close() fOut.close() - backend.gameResult(width, height, users, replayArchivePath, errorPaths) + backend.gameResult(gameTask["pairingID"], width, height, users, replayArchivePath, errorPaths) filelist = glob.glob("*.log") for f in filelist: os.remove(f) @@ -189,7 +192,7 @@ def executeGameTask(width, height, users, backend): if task["type"] == "compile": executeCompileTask(task["user"], backend) else: - executeGameTask(int(task["width"]), int(task["height"]), task["users"], backend) + executeGameTask(task, backend) else: print("No task available. Sleeping...") sleep(2) From d394dcfe2154b8eb75e6c25531c3f949f98e9042 Mon Sep 17 00:00:00 2001 From: Janzert Date: Tue, 6 Dec 2016 06:17:22 -0500 Subject: [PATCH 02/11] Remove errant comma. --- website/sql/schema.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/sql/schema.sql b/website/sql/schema.sql index 15ed613d3..c13994c7b 100644 --- a/website/sql/schema.sql +++ b/website/sql/schema.sql @@ -77,7 +77,7 @@ DROP TABLE IF EXISTS `PairingUser`; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `PairingUser` ( `pairingID` mediumint(8) unsigned NOT NULL, - `userID` mediumint(8) unsigned NOT NULL, + `userID` mediumint(8) unsigned NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; From 3ccd23dd714f634a914b913970f5e514451fdeb8 Mon Sep 17 00:00:00 2001 From: Janzert Date: Sat, 10 Dec 2016 02:04:39 -0500 Subject: [PATCH 03/11] Give worker a real main function. --- worker/worker.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/worker/worker.py b/worker/worker.py index bdf2c2226..c4c550a2c 100644 --- a/worker/worker.py +++ b/worker/worker.py @@ -182,7 +182,7 @@ def executeGameTask(gameTask, backend): os.remove(replayPath) os.remove(replayArchivePath) -if __name__ == "__main__": +def main(): print("Starting up worker...") while True: try: @@ -202,3 +202,5 @@ def executeGameTask(gameTask, backend): print("Sleeping...") sleep(2) +if __name__ == "__main__": + main() From 7d024e155af735f0baf4481d1481a5e3d9179a7f Mon Sep 17 00:00:00 2001 From: Janzert Date: Sat, 10 Dec 2016 02:05:46 -0500 Subject: [PATCH 04/11] Fix insert method call. --- website/api/manager/ManagerAPI.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/api/manager/ManagerAPI.php b/website/api/manager/ManagerAPI.php index d6ee9408a..77c0957b6 100644 --- a/website/api/manager/ManagerAPI.php +++ b/website/api/manager/ManagerAPI.php @@ -120,7 +120,7 @@ protected function task() { foreach($players as $player) { $playerInsert .= "(".$pairing["pairingID"].", ".$player["userID"]."),"; } - $this.insert($playerInsert); + $this->insert($playerInsert); // Send game task if(count($players) == $numPlayers) { From 7479e48f2f4c028e18bf288e95ccfcaea4cdbec0 Mon Sep 17 00:00:00 2001 From: Janzert Date: Sat, 10 Dec 2016 02:23:53 -0500 Subject: [PATCH 05/11] Send pairingID with game task. --- website/api/manager/ManagerAPI.php | 1 + 1 file changed, 1 insertion(+) diff --git a/website/api/manager/ManagerAPI.php b/website/api/manager/ManagerAPI.php index 77c0957b6..2ba043ee9 100644 --- a/website/api/manager/ManagerAPI.php +++ b/website/api/manager/ManagerAPI.php @@ -126,6 +126,7 @@ protected function task() { if(count($players) == $numPlayers) { return array( "type" => "game", + "pairingID" => $pairing["pairingID"], "width" => $size, "height" => $size, "users" => $players From 0c737af08c7aa15275599569abc5195b9959dfb3 Mon Sep 17 00:00:00 2001 From: Janzert Date: Sat, 10 Dec 2016 04:06:41 -0500 Subject: [PATCH 06/11] Fix a couple of queries. --- website/api/manager/ManagerAPI.php | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/website/api/manager/ManagerAPI.php b/website/api/manager/ManagerAPI.php index 2ba043ee9..b7d7509f2 100644 --- a/website/api/manager/ManagerAPI.php +++ b/website/api/manager/ManagerAPI.php @@ -67,9 +67,9 @@ private function getTrueskillMatchQuality($rankingValues) { private function clearPairing() { if(isset($_POST['pairingID'])) { - $pairingID = $_POST['pairingID']; + $pairingID = this->mysqli->real_escape_string($_POST['pairingID']); $this->insert("DELETE FROM PairingUser WHERE pairingID={$pairingID}"); - $this->insert("DELETE FROM Pairing WHERE gameID={$pairingID}"); + $this->insert("DELETE FROM Pairing WHERE pairingID={$pairingID}"); } } @@ -116,10 +116,12 @@ protected function task() { $worker = $this->select("SELECT * FROM Worker WHERE apiKey=".$this->mysqli->real_escape_string($this->apiKey)." LIMIT 1"); $this->insert("INSERT INTO Pairing (workerID) VALUES (".$worker["workerID"].")"); $pairing = $this->select("SELECT * FROM Pairing WHERE workerID=".$worker["workerID"]." ORDER BY pairingID DESC LIMIT 1"); - $playerInsert = "INSERT INTO PairingUser (pairingID, userID) VALUES "; + $playerValues = array(); foreach($players as $player) { - $playerInsert .= "(".$pairing["pairingID"].", ".$player["userID"]."),"; + $playerValues[] = "(".$pairing["pairingID"].", ".$player["userID"].")"; } + $playerValues = implode(",", $playerValues); + $playerInsert = "INSERT INTO PairingUser (pairingID, userID) VALUES ".$playerValues; $this->insert($playerInsert); // Send game task From cefd2fbf8dfc2fda0f58b310b8c44112247eae6f Mon Sep 17 00:00:00 2001 From: Janzert Date: Sun, 11 Dec 2016 01:56:06 -0500 Subject: [PATCH 07/11] Fix seed query. Add missing $. --- website/api/manager/ManagerAPI.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/api/manager/ManagerAPI.php b/website/api/manager/ManagerAPI.php index b7d7509f2..1c23c730b 100644 --- a/website/api/manager/ManagerAPI.php +++ b/website/api/manager/ManagerAPI.php @@ -67,7 +67,7 @@ private function getTrueskillMatchQuality($rankingValues) { private function clearPairing() { if(isset($_POST['pairingID'])) { - $pairingID = this->mysqli->real_escape_string($_POST['pairingID']); + $pairingID = $this->mysqli->real_escape_string($_POST['pairingID']); $this->insert("DELETE FROM PairingUser WHERE pairingID={$pairingID}"); $this->insert("DELETE FROM Pairing WHERE pairingID={$pairingID}"); } @@ -95,7 +95,7 @@ protected function task() { $seedPlayer = null; $randValue = mt_rand() / mt_getrandmax(); if($randValue > 0.5) { - $seedPlayer = $this->select("SELECT u.* FROM (SELECT MAX(p.timestamp) as maxTime, pu.userID as userID from PairingUser pu INNER JOIN Pairing p ON p.pairingID = pu.pairingID GROUP BY pu.userID) temptable INNER JOIN User u on u.userID = temptable.userID WHERE maxTime < DATE_SUB(NOW(), INTERVAL 10 MINUTE) AND isRunning = 1 order by rand()*-pow(sigma, 2) LIMIT 1"); + $seedPlayer = $this->select("SELECT u.* FROM (SELECT MAX(p.timestamp) as maxTime, pu.userID as userID from PairingUser pu INNER JOIN Pairing p ON p.pairingID = pu.pairingID GROUP BY pu.userID) temptable RIGHT JOIN User u on u.userID = temptable.userID WHERE (maxTime IS NULL OR maxTime < DATE_SUB(NOW(), INTERVAL 10 MINUTE)) AND isRunning = 1 order by rand()*-pow(sigma, 2) LIMIT 1"); } if ($randValue > 0.25 && $randValue <= 0.5) { $seedPlayer = $this->select("SELECT * FROM (SELECT u.* FROM (SELECT MAX(g.timestamp) as maxTime, gu.userID as userID FROM GameUser gu INNER JOIN Game g ON g.gameID=gu.gameID GROUP BY gu.userID) temptable INNER JOIN User u on u.userID = temptable.userID where numGames < 400 order by maxTime ASC limit 15) orderedTable order by rand() limit 1;"); From 37e6548821af750163b7ae588eb349d9139c5e4a Mon Sep 17 00:00:00 2001 From: Janzert Date: Sun, 11 Dec 2016 02:41:41 -0500 Subject: [PATCH 08/11] Fix comma that slipped through merge. --- worker/worker.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/worker/worker.py b/worker/worker.py index 3839ad565..d59d80263 100644 --- a/worker/worker.py +++ b/worker/worker.py @@ -181,7 +181,7 @@ def main(): executeCompileTask(task["user"], backend) else: print("Running a game task...\n") - executeGameTask(task,, backend) + executeGameTask(task, backend) else: print("No task available at time %s (GMT). Sleeping...\n" % str(strftime("%Y-%m-%d %H:%M:%S", gmtime()))) sleep(2) From fc937379268b8de158194843492f29323393fb37 Mon Sep 17 00:00:00 2001 From: Janzert Date: Mon, 12 Dec 2016 20:26:50 -0500 Subject: [PATCH 09/11] Use a pairingID paramater for clearPairing() function. --- website/api/manager/ManagerAPI.php | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/website/api/manager/ManagerAPI.php b/website/api/manager/ManagerAPI.php index 25d52b066..745d934a3 100644 --- a/website/api/manager/ManagerAPI.php +++ b/website/api/manager/ManagerAPI.php @@ -65,12 +65,10 @@ private function getTrueskillMatchQuality($rankingValues) { return floatval($lines[0]); } - private function clearPairing() { - if(isset($_POST['pairingID'])) { - $pairingID = $this->mysqli->real_escape_string($_POST['pairingID']); - $this->insert("DELETE FROM PairingUser WHERE pairingID={$pairingID}"); - $this->insert("DELETE FROM Pairing WHERE pairingID={$pairingID}"); - } + private function clearPairing($pairingID) { + $pairingID = $this->mysqli->real_escape_string($pairingID); + $this->insert("DELETE FROM PairingUser WHERE pairingID={$pairingID}"); + $this->insert("DELETE FROM Pairing WHERE pairingID={$pairingID}"); } /////////////////////////API ENDPOINTS\\\\\\\\\\\\\\\\\\\\\\\\\\\\ @@ -182,7 +180,9 @@ protected function game() { $storedUser = $this->select("SELECT * FROM User WHERE userID=".$this->mysqli->real_escape_string($user->userID)); array_push($storedUsers, $storedUser); if(intval($storedUser['numSubmissions']) != intval($user->numSubmissions)) { - $this->clearPairing(); + if(isset($_POST['pairingID'])) { + $this->clearPairing($_POST['pairingID']); + } return null; } } @@ -283,7 +283,9 @@ protected function game() { $this->insert("UPDATE User SET rank={$rank} WHERE userID={$allUsers[$userIndex]['userID']}"); } - $this->clearPairing(); + if(isset($_POST['pairingID'])) { + $this->clearPairing($_POST['pairingID']); + } } } From 6b2d42ec9cd98af002189e215a663c8b4d9262c9 Mon Sep 17 00:00:00 2001 From: Janzert Date: Mon, 12 Dec 2016 22:48:58 -0500 Subject: [PATCH 10/11] Rename Pairing to GameTask. --- website/api/manager/ManagerAPI.php | 28 ++++++++++++++-------------- website/sql/schema.sql | 18 +++++++++--------- worker/backend.py | 4 ++-- worker/worker.py | 2 +- 4 files changed, 26 insertions(+), 26 deletions(-) diff --git a/website/api/manager/ManagerAPI.php b/website/api/manager/ManagerAPI.php index 745d934a3..0a7dd9a08 100644 --- a/website/api/manager/ManagerAPI.php +++ b/website/api/manager/ManagerAPI.php @@ -65,10 +65,10 @@ private function getTrueskillMatchQuality($rankingValues) { return floatval($lines[0]); } - private function clearPairing($pairingID) { - $pairingID = $this->mysqli->real_escape_string($pairingID); - $this->insert("DELETE FROM PairingUser WHERE pairingID={$pairingID}"); - $this->insert("DELETE FROM Pairing WHERE pairingID={$pairingID}"); + private function clearGameTask($gametaskID) { + $gametaskID = $this->mysqli->real_escape_string($gametaskID); + $this->insert("DELETE FROM GameTaskUser WHERE gametaskID={$gametaskID}"); + $this->insert("DELETE FROM GameTask WHERE gametaskID={$gametaskID}"); } /////////////////////////API ENDPOINTS\\\\\\\\\\\\\\\\\\\\\\\\\\\\ @@ -93,7 +93,7 @@ protected function task() { $seedPlayer = null; $randValue = mt_rand() / mt_getrandmax(); if($randValue > 0.5) { - $seedPlayer = $this->select("SELECT u.* FROM (SELECT MAX(p.timestamp) as maxTime, pu.userID as userID from PairingUser pu INNER JOIN Pairing p ON p.pairingID = pu.pairingID GROUP BY pu.userID) temptable RIGHT JOIN User u on u.userID = temptable.userID WHERE (maxTime IS NULL OR maxTime < DATE_SUB(NOW(), INTERVAL 10 MINUTE)) AND isRunning = 1 order by rand()*-pow(sigma, 2) LIMIT 1"); + $seedPlayer = $this->select("SELECT u.* FROM (SELECT MAX(p.timestamp) as maxTime, pu.userID as userID from GameTaskUser pu INNER JOIN GameTask p ON p.gametaskID = pu.gametaskID GROUP BY pu.userID) temptable RIGHT JOIN User u on u.userID = temptable.userID WHERE (maxTime IS NULL OR maxTime < DATE_SUB(NOW(), INTERVAL 10 MINUTE)) AND isRunning = 1 order by rand()*-pow(sigma, 2) LIMIT 1"); } if ($randValue > 0.25 && $randValue <= 0.5) { $seedPlayer = $this->select("SELECT * FROM (SELECT u.* FROM (SELECT MAX(g.timestamp) as maxTime, gu.userID as userID FROM GameUser gu INNER JOIN Game g ON g.gameID=gu.gameID GROUP BY gu.userID) temptable INNER JOIN User u on u.userID = temptable.userID where numGames < 400 and isRunning = 1 order by maxTime ASC limit 15) orderedTable order by rand() limit 1;"); @@ -112,21 +112,21 @@ protected function task() { // Record pairing $worker = $this->select("SELECT * FROM Worker WHERE apiKey=".$this->mysqli->real_escape_string($this->apiKey)." LIMIT 1"); - $this->insert("INSERT INTO Pairing (workerID) VALUES (".$worker["workerID"].")"); - $pairing = $this->select("SELECT * FROM Pairing WHERE workerID=".$worker["workerID"]." ORDER BY pairingID DESC LIMIT 1"); + $this->insert("INSERT INTO GameTask (workerID) VALUES (".$worker["workerID"].")"); + $pairing = $this->select("SELECT * FROM GameTask WHERE workerID=".$worker["workerID"]." ORDER BY gametaskID DESC LIMIT 1"); $playerValues = array(); foreach($players as $player) { - $playerValues[] = "(".$pairing["pairingID"].", ".$player["userID"].")"; + $playerValues[] = "(".$pairing["gametaskID"].", ".$player["userID"].")"; } $playerValues = implode(",", $playerValues); - $playerInsert = "INSERT INTO PairingUser (pairingID, userID) VALUES ".$playerValues; + $playerInsert = "INSERT INTO GameTaskUser (gametaskID, userID) VALUES ".$playerValues; $this->insert($playerInsert); // Send game task if(count($players) == $numPlayers) { return array( "type" => "game", - "pairingID" => $pairing["pairingID"], + "gametaskID" => $pairing["gametaskID"], "width" => $size, "height" => $size, "users" => $players @@ -180,8 +180,8 @@ protected function game() { $storedUser = $this->select("SELECT * FROM User WHERE userID=".$this->mysqli->real_escape_string($user->userID)); array_push($storedUsers, $storedUser); if(intval($storedUser['numSubmissions']) != intval($user->numSubmissions)) { - if(isset($_POST['pairingID'])) { - $this->clearPairing($_POST['pairingID']); + if(isset($_POST['gametaskID'])) { + $this->clearGameTask($_POST['gametaskID']); } return null; } @@ -283,8 +283,8 @@ protected function game() { $this->insert("UPDATE User SET rank={$rank} WHERE userID={$allUsers[$userIndex]['userID']}"); } - if(isset($_POST['pairingID'])) { - $this->clearPairing($_POST['pairingID']); + if(isset($_POST['gametaskID'])) { + $this->clearGameTask($_POST['gametaskID']); } } } diff --git a/website/sql/schema.sql b/website/sql/schema.sql index f5b3686c2..30d785881 100644 --- a/website/sql/schema.sql +++ b/website/sql/schema.sql @@ -54,29 +54,29 @@ CREATE TABLE `GameUser` ( /*!40101 SET character_set_client = @saved_cs_client */; -- --- Table structure for table `Pairing` +-- Table structure for table `GameTask` -- -DROP TABLE IF EXISTS `Pairing`; +DROP TABLE IF EXISTS `GameTask`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; -CREATE TABLE `Pairing` ( - `pairingID` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, +CREATE TABLE `GameTask` ( + `gametaskID` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `workerID` mediumint(8) unsigned NOT NULL, `timestamp` datetime DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (`pairingID`) + PRIMARY KEY (`gametaskID`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; -- --- Table structure for table `PairingUser` +-- Table structure for table `GameTaskUser` -- -DROP TABLE IF EXISTS `PairingUser`; +DROP TABLE IF EXISTS `GameTaskUser`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; -CREATE TABLE `PairingUser` ( - `pairingID` mediumint(8) unsigned NOT NULL, +CREATE TABLE `GameTaskUser` ( + `gametaskID` mediumint(8) unsigned NOT NULL, `userID` mediumint(8) unsigned NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; diff --git a/worker/backend.py b/worker/backend.py index 7eddfa548..ccf4db93a 100644 --- a/worker/backend.py +++ b/worker/backend.py @@ -85,10 +85,10 @@ def compileResult(userID, didCompile, language, errors=None): r = requests.post(MANAGER_URL+"compile", data={"apiKey": API_KEY, "userID": userID, "didCompile": int(didCompile), "language": language, "errors": errors}) print("Posting compile result %s\n" % r.text) -def gameResult(pairID, width, height, users, replayPath, errorPaths): +def gameResult(gametaskID, width, height, users, replayPath, errorPaths): """Posts the result of a game task""" files = {os.path.basename(replayPath): open(replayPath, "rb").read()} for path in errorPaths: files[os.path.basename(path)] = open(path, "rb").read() - r = requests.post(MANAGER_URL+"game", data={"apiKey": API_KEY, "pairingID": pairID, "mapWidth": str(width), "mapHeight": str(height), "users": json.dumps(users)}, files=files) + r = requests.post(MANAGER_URL+"game", data={"apiKey": API_KEY, "gametaskID": gametaskID, "mapWidth": str(width), "mapHeight": str(height), "users": json.dumps(users)}, files=files) print("Posting game result %s\n" % r.text) diff --git a/worker/worker.py b/worker/worker.py index d59d80263..226695ee2 100644 --- a/worker/worker.py +++ b/worker/worker.py @@ -159,7 +159,7 @@ def executeGameTask(gameTask, backend): fIn.close() fOut.close() - backend.gameResult(gameTask["pairingID"], width, height, users, replayArchivePath, errorPaths) + backend.gameResult(gameTask["gametaskID"], width, height, users, replayArchivePath, errorPaths) filelist = glob.glob("*.log") for f in filelist: os.remove(f) From f6b61440eb11d879fe9c2bdf6447b9db5606d96e Mon Sep 17 00:00:00 2001 From: Janzert Date: Sun, 18 Dec 2016 21:26:14 -0500 Subject: [PATCH 11/11] Use mysqli->last_id to get gametaskID. --- website/api/manager/ManagerAPI.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/api/manager/ManagerAPI.php b/website/api/manager/ManagerAPI.php index 0a7dd9a08..cda8ed875 100644 --- a/website/api/manager/ManagerAPI.php +++ b/website/api/manager/ManagerAPI.php @@ -113,10 +113,10 @@ protected function task() { // Record pairing $worker = $this->select("SELECT * FROM Worker WHERE apiKey=".$this->mysqli->real_escape_string($this->apiKey)." LIMIT 1"); $this->insert("INSERT INTO GameTask (workerID) VALUES (".$worker["workerID"].")"); - $pairing = $this->select("SELECT * FROM GameTask WHERE workerID=".$worker["workerID"]." ORDER BY gametaskID DESC LIMIT 1"); + $gametaskID = $this->mysqli->insert_id; $playerValues = array(); foreach($players as $player) { - $playerValues[] = "(".$pairing["gametaskID"].", ".$player["userID"].")"; + $playerValues[] = "(".$gametaskID.", ".$player["userID"].")"; } $playerValues = implode(",", $playerValues); $playerInsert = "INSERT INTO GameTaskUser (gametaskID, userID) VALUES ".$playerValues; @@ -126,7 +126,7 @@ protected function task() { if(count($players) == $numPlayers) { return array( "type" => "game", - "gametaskID" => $pairing["gametaskID"], + "gametaskID" => $gametaskID, "width" => $size, "height" => $size, "users" => $players