protected function process($sock, $message) { $pi = ParsedInstruction::parse($message); if (isset($pi->getData()["WATCH_CLIENT"]) && $pi->getData()["WATCH_CLIENT"] == 'true') { $this->send($sock, $this->proto->process_watch_instruction($pi, $sock)); return; } $this->send($sock, $this->proto->process_instruction($pi, $sock)); }
protected function process($sock, $message) { $pi = ParsedInstruction::parse($message); $this->send($sock, process_instruction($pi)); }
function process_instruction($pi, $sock) { //sock IS ONLY PROPAGATED TO OTHER FUNCTIONS!!! $instruction = $pi->getInstruction(); $data = $pi->getData(); $mysqli = new mysqli(HOST, USER, PASSWORD, SB_DATABASE); $for = "general"; $other = ""; switch ($instruction) { case 'NOTIFY': $addr = GetSafeValue($data, 'email'); $cont = GetSafeValue($data, 'content'); $success = mail($addr, 'QuizBowl Notification', $cont, 'From: notifications@quizbowl.us'); break; //Make sure to use NodeJS if you decide to reprogram the server. I only used PHP because the original hosting plan didn't support NodeJS.// //Little did I know we would need the Virtual Server plan (which supports Node) anyway to support the Websocket server! This is the story of the birth of this program.// //Make sure to use NodeJS if you decide to reprogram the server. I only used PHP because the original hosting plan didn't support NodeJS.// //Little did I know we would need the Virtual Server plan (which supports Node) anyway to support the Websocket server! This is the story of the birth of this program.// case 'CREATE_GAME': $gnm = $mysqli->real_escape_string(GetSafeValue($data, 'room')); $comp_pwd = $mysqli->real_escape_string(GetSafeValue($data, 'password')); $access_id = $mysqli->real_escape_string(GetSafeValue($data, 'access_id')); $t1n = $mysqli->real_escape_string(GetSafeValue($data, 'Team1_Name')); $t2n = $mysqli->real_escape_string(GetSafeValue($data, 'Team2_Name')); if (empty($gnm) || empty($t1n) || empty($t2n)) { return "ERROR\n" . "message: Insufficient data given to create game."; } $comp_rows = $mysqli->query("SELECT * FROM `competitions` WHERE access_id='{$access_id}'"); if (!$comp_rows || !$comp_rows->num_rows) { $output = "ERROR\n" . "message: Invalid Access ID."; return $output; } $comp_row = $comp_rows->fetch_assoc(); if (!password_verify($comp_pwd, $comp_row['pwd'])) { $output = "ERROR\n" . "message: Invalid Password."; return $output; } $comp = $comp_row['name']; $comp_id = $comp_row['cid']; $query = "INSERT INTO `{$access_id}` VALUES ( '{$t1n}', '{$t2n}', 0, 0, {$comp_id}, '{$gnm}', 0, '' )"; $mysqli->query($query); if ($mysqli->error) { return "ERROR\n" . "message: " . $mysqli->error; } $for = "login"; $cnm = $comp_row['name']; $gid = $mysqli->insert_id; $other = "cid: {$comp_id}\n" . "gid: {$gid}\n" . "cnm: {$cnm}"; $usepi = ParsedInstruction::parse("CREATE_GAME\n" . "gid:{$gid}\n" . "T1S:0\n" . "T2S:0\n" . "T1N:{$t1n}\n" . "T2N:{$t2n}\n" . "access_id:{$access_id}\n" . "finished:false"); $this->process_watch_instruction($usepi, $sock); break; case 'RECOVER_GAME': $comp_pwd = $mysqli->real_escape_string(GetSafeValue($data, 'password')); $access_id = $mysqli->real_escape_string(GetSafeValue($data, 'access_id')); $gid = $mysqli->real_escape_string(GetSafeValue($data, 'gid')); if (empty($comp_pwd) || empty($access_id) || empty($gid)) { return "ERROR\n" . "message: Insufficient data given to recover game."; } $comp_rows = $mysqli->query("SELECT * FROM `competitions` WHERE access_id='{$access_id}'"); if (!$comp_rows || !$comp_rows->num_rows) { $output = "ERROR\n" . "message: Invalid Access ID."; return $output; } $comp_row = $comp_rows->fetch_assoc(); if (!password_verify($comp_pwd, $comp_row['pwd'])) { $output = "ERROR\n" . "message: Invalid Password."; return $output; } $comp = $comp_row['name']; $comp_id = $comp_row['cid']; $query = "SELECT * FROM `{$access_id}` WHERE gid={$gid}"; $resset = $mysqli->query($query); if (!$resset || !$resset->num_rows) { return "ERROR\n" . "message: Game with GID {$gid} not found."; } $res = $resset->fetch_assoc(); $t1s = $res['Team1_Score']; $t2s = $res['Team2_Score']; $t1n = $res['Team1_Name']; $t2n = $res['Team2_Name']; $gnm = $res['room']; $cnm = $comp_row['name']; $for = "recover"; $other = "cid: {$comp_id}\n" . "gid: {$gid}\n" . "T1S: {$t1s}\n" . "T2S: {$t2s}\n" . "T1N: {$t1n}\n" . "T2N: {$t2n}\n" . "room: {$gnm}\n" . "cnm: {$cnm}"; break; case 'SAVE_SCORE': $game = GetSafeValue($data, 'gid'); $t1s = GetSafeValue($data, 'T1S'); $t2s = GetSafeValue($data, 'T2S'); $comp = GetSafeValue($data, 'comp'); $pwd = GetSafeValue($data, 'comp_pwd'); $rows = $mysqli->query("SELECT * FROM `competitions` WHERE cid={$comp}"); if (!$rows) { $output = "ERROR\n" . "message: Invalid Access ID or Password."; return $output; } $row = $rows->fetch_assoc(); $cname = $row['name']; $caid = $row['access_id']; if (empty($game) && $game !== "0" || empty($t1s) && $t1s !== "0" || empty($t2s) && $t2s !== "0") { return ERR_INSUFFICIENT_DATA; } $query = "UPDATE `{$caid}` SET Team1_Score = {$t1s}, Team2_Score = {$t2s} WHERE gid={$game}"; $mysqli->query($query); if ($mysqli->error) { return "ERROR\nmessage: " . $mysqli->error; } $this->process_watch_instruction($pi, $sock); $for = "saving"; break; case 'FINALIZE': $pwd = $mysqli->real_escape_string(GetSafeValue($data, 'pwd')); $gid = $mysqli->real_escape_string(GetSafeValue($data, 'gid')); $cid = $mysqli->real_escape_string(GetSafeValue($data, 'cid')); $row = $mysqli->query("SELECT * FROM `competitions` WHERE cid={$cid}"); if ($mysqli->error) { return "ERROR\n" . "message: " . $mysqli->error; } if (!$row) { return "ERROR\n" . "message: No competition with that ID was found!"; } $row = $row->fetch_assoc(); //Makes things easier for us to just use the same variable here $password = $row['pwd']; $access_id = $row['access_id']; if (!password_verify($pwd, $password)) { return "ERROR\n" . "message: Invalid password for competition\n#{$cid}; will not finalize scores."; } $query = "UPDATE `{$access_id}` SET finished=1 WHERE gid={$gid}\n"; $mysqli->query($query); if ($mysqli->error) { return "ERROR\n" . "message: " . $mysqli->error; } $this->process_watch_instruction($pi, $sock); $for = "finalizing"; break; case 'ECHO': //Testing scenarios return GetSafeValue($data, 'data'); default: return ERR_INVALID_INSTRUCTION . ': ' . $instruction; } return <<<OUTPUT OK for:{$for} {$other} OUTPUT; }