From adb995edd2f7c616523077414ba68cb04804ffe3 Mon Sep 17 00:00:00 2001 From: kasparkivistik Date: Thu, 21 Dec 2017 09:20:32 +0200 Subject: [PATCH] see aine on tehtud ju --- package.json | 10 ++++ prax4/src/createpost.php | 20 ++++--- prax4/src/viewpost.php | 2 +- prax5/app.js | 124 ++++++++++++++++++++++++++++++++++++++- prax5/index.html | 34 ++++++----- prax5/index.js | 62 ++++++++++++++++++++ prax5/kivi.jpg | Bin 0 -> 47689 bytes prax5/server.js | 124 +++++++++++++++++++++++++++++++++++---- 8 files changed, 337 insertions(+), 39 deletions(-) create mode 100644 package.json create mode 100644 prax5/index.js create mode 100644 prax5/kivi.jpg diff --git a/package.json b/package.json new file mode 100644 index 0000000..ba4b2f7 --- /dev/null +++ b/package.json @@ -0,0 +1,10 @@ +{ + "name": "itv0110", + "version": "0.0.1", + "dependencies": { + "express": "latest" + }, + "devDependencies": { + "express": "latest" + } +} diff --git a/prax4/src/createpost.php b/prax4/src/createpost.php index 6455713..96e4ee4 100644 --- a/prax4/src/createpost.php +++ b/prax4/src/createpost.php @@ -1,7 +1,7 @@
-
+ Hello create new post thanks




- + query($sql) === true) { $message = "Success!"; echo ""; header("Location: index.php"); - } } ?> diff --git a/prax4/src/viewpost.php b/prax4/src/viewpost.php index 0aa733f..8b5bfc4 100644 --- a/prax4/src/viewpost.php +++ b/prax4/src/viewpost.php @@ -54,7 +54,7 @@ $commentQuery = "SELECT * FROM 164347_comments WHERE post_id = $id"; $commentResult = mysqli_query($connection, $commentQuery); echo 'comments'; -while ($commentRow = mysqli_fetch_assoc($commentResult)) { +while ($commentRow = mysqli_fetch_assoc($commentResult )) { $commentRow = array_values($commentRow); echo '
Published by ' . $commentRow[2] . ' at ' . $commentRow[3] . '
diff --git a/prax5/app.js b/prax5/app.js index a68dd25..873256a 100644 --- a/prax5/app.js +++ b/prax5/app.js @@ -1,3 +1,123 @@ -function move(move) { +var http = require('http'); +var url = require('url'); +var fs = require('fs'); +http.createServer(function (req, res) { + if (req.url.indexOf("/start") > -1) { + start(req, res); + } else if (req.url.indexOf("/waiting") > -1) { + waiting(req, res); + } else { + res.writeHead(200, {'Content-Type': 'text/html'}); + res.write(''); + res.write(''); + res.write('
see koht kus mihkel raual see saade on
'); + res.write('Nimi:
'); + res.write(' Kivi
'); + res.write(' Paber
'); + res.write(' Käärid
'); + res.write(''); + res.write(''); + res.write(''); + res.end(); + } +}).listen(7938); +console.log('Server running!'); -} \ No newline at end of file +function start(req, res) { + var url_parts = url.parse(req.url, true); + var query = url_parts.query; + fs.readFile('state.json', 'utf8', function (err, data) { + if (err || !data || data === "") { + fs.writeFile('state.json', '{}', 'utf8'); + res.writeHead(500, {'Content-Type': 'text/html'}); + res.write(''); + res.write('
Tekkis viga proovi uuesti.

'); + res.write('tagasi'); + res.end(); + } else { + play(query, res, data); + } + }); +} + +function play(query, res, data) { + var obj = JSON.parse(data); + var count = Object.keys(obj).length; + if (count === 0) { + fs.writeFile('state.json', '{"' + query.name + '":"' + query.value + '"}', 'utf8'); + res.writeHead(302, {'Location': '/waiting'}); + res.end(); + } else if (count === 1) { + var playerValue = query.value; + obj[query.name] = playerValue; + fs.writeFile('state.json', JSON.stringify(obj), 'utf8'); + var opponentNAme = Object.keys(obj)[0]; + var opponentValue = obj[opponentNAme]; + var result = checkResult(playerValue, opponentValue); + res.writeHead(200, {'Content-Type': 'text/html'}); + res.write(''); + res.write("Sa " + result + " mängu " + opponentNAme + " vastu."); + res.write('
Uus mäng'); + res.end(); + } else { + fs.writeFile('state.json', '{"' + query.name + '":"' + query.value + '"}', 'utf8'); + res.writeHead(302, {'Location': '/waiting'}); + res.end(); + } +} + +function waiting(req, res) { + fs.readFile('state.json', 'utf8', function (err, data) { + if (err || !data || data === "") { + fs.writeFile('state.json', '{}', 'utf8'); + res.writeHead(500, {'Content-Type': 'text/html'}); + res.write(''); + res.write('Tekkis viga proovi uuesti.
'); + res.write('tagasi'); + res.end(); + } else { + obj = JSON.parse(data); + var count = Object.keys(obj).length; + if (count === 2) { + var playerName = Object.keys(obj)[0]; + var opponentName = Object.keys(obj)[1]; + var result = checkResult(obj[playerName], obj[opponentName]); + res.writeHead(200, {'Content-Type': 'text/html'}); + res.write(''); + res.write("mäng lõppes " + result + " mängu " + opponentName + " vastu."); + res.write('
Uus mäng'); + res.end(); + } else { + res.writeHead(200, {'Content-Type': 'text/html'}); + res.write(''); + res.write(''); + res.write('oota'); + res.end(); + } + } + }); +} + +function checkResult(playerValue, opponentValue) { + console.log(playerValue, opponentValue); + if (playerValue === "paper") { + if (opponentValue === "rock") { + return "võitsid"; + } else if (opponentValue === "scissors") { + return "kaotasid"; + } + } else if (playerValue === "rock") { + if (opponentValue === "scissors") { + return "võitsid"; + } else if (opponentValue === "paper") { + return "kaotasid"; + } + } else if (playerValue === "scissors") { + if (opponentValue === "paper") { + return "võitsid"; + } else if (opponentValue === "rock") { + return "kaotasid"; + } + } + return "viik"; +} diff --git a/prax5/index.html b/prax5/index.html index d69a9fd..a38bb13 100644 --- a/prax5/index.html +++ b/prax5/index.html @@ -1,25 +1,29 @@ - - - rock papa scisas - - - - + + kolmeraudne + + + + -

vali oma lemmik

- -
- kivi - paber - käärid +
+
+



+ + + +
+
+
+
sau ma kaspar kivistik 164347
+ paneme siia ruttu see 7.5 ära siis ma saan selle aine nelja ja olen õnnelik
- + \ No newline at end of file diff --git a/prax5/index.js b/prax5/index.js new file mode 100644 index 0000000..9c3bb0b --- /dev/null +++ b/prax5/index.js @@ -0,0 +1,62 @@ +console.log("run"); + +if (localStorage.getItem("result")) { + $("#result").text(localStorage.getItem("result")); + localStorage.removeItem("result"); + localStorage.removeItem("waiting"); +} else if (localStorage.getItem("waiting") === "true") { + refresh(); + localStorage.removeItem("waiting"); +} + +function postMove(move) { + var xhr = new XMLHttpRequest(); + var name = $("#player-name").val(); + xhr.open("GET", "xhr://dijkstra.cs.ttu.ee:7842/?player=" + name + "&option=" + move + "&reset=false"); + xhr.onreadystatechange = function () { + if (xhr.readyState === 4) { + if (xhr.status === 200 || xhr.status === 0) { + var response = xhr.responseText; + if (response.length > 2) { + localStorage.setItem("result", response); + } else { + localStorage.setItem("waiting", "true"); + } + } + } + }; + xhr.send(); +} + +function requestResult() { + var xhr = new XMLHttpRequest(); + xhr.open("GET", "http://dijkstra.cs.ttu.ee:7842/?player=\"none\"&option=\"none\"&reset=waiting"); + xhr.onreadystatechange = function () { + if (xhr.readyState === 4) { + if (xhr.status === 200) { + var response = xhr.responseText; + if (response.length > 2) { + $("#result").text(response); + clearGame(); + } else { + localStorage.setItem("waiting", "true"); + refresh(); + } + } + } + }; + xhr.send(); +} + +function refresh() { + $("#result").text("waiting for other player..."); + setTimeout(function () { + requestResult(); + }, 5000); +} + +function clearGame() { + var xhr = new XMLHttpRequest(); + xhr.open("GET", "http://dijkstra.cs.ttu.ee:7842/?player=\"none\"&option=\"none\"&reset=true"); + xhr.send(); +} \ No newline at end of file diff --git a/prax5/kivi.jpg b/prax5/kivi.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7e8c5e097077ac499c0f233bea899d827e3ab0be GIT binary patch literal 47689 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%0A){1G8r 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 E*%kwc0RR91 literal 0 HcmV?d00001 diff --git a/prax5/server.js b/prax5/server.js index 884837e..750a25a 100644 --- a/prax5/server.js +++ b/prax5/server.js @@ -1,17 +1,117 @@ -const http = require('http'); -const fs = require('fs'); -const path = require('path'); +var http = require("http"); +var url = require("url"); + +var chosenName; +var chosenOption; +var state; + +var firstName; +var secondName; +var firstOption; +var secondOption; + +var winStr; http.createServer(function (req, res) { - const filePath = path.join(__dirname, 'index.html'); - const stat = fs.statSync(filePath); + res.setHeader('Access-Control-Allow-Origin', 'http://dijkstra.cs.ttu.ee'); + var gameResultStr; + var urlParts = url.parse(req.url, true); + + var parse = parseUrl(urlParts); + var newGame = function () { + shouldNewGameStart(parse); + }; + var bothPlayers = function () { + haveBothPlayersChosen(newGame()); + }; + var gameResult = function (res) { + gameResultStr = getGameResult(bothPlayers()); + }; + gameResult(); + res.end(gameResultStr); + chosenName = null; + chosenOption = null; + +}).listen(7842); + +function getGameResult() { + var str; + if (winStr) { + str = winStr; + } + return str; +} + +function haveBothPlayersChosen() { + if (!winStr) { + if (chosenName && chosenOption && firstName && firstOption) { + secondName = chosenName; + secondOption = chosenOption; + winStr = createGameResultStr(); + } else if (chosenName && chosenOption) { + firstName = chosenName; + firstOption = chosenOption; + } + } +} + +function shouldNewGameStart() { + if (state === "true") { + clearVariables(); + } +} + +function parseUrl(urlParts) { + if (urlParts.query["reset"] === "false") { + chosenName = urlParts.query["player"]; + chosenOption = urlParts.query["option"]; + } + state = urlParts.query["reset"]; +} - res.writeHead(200, { - 'Content-Type': 'text/html', - 'Content-Length': stat.size - }); +function clearVariables() { + winStr = null; + firstName = null; + secondName = null; + firstOption = null; + secondOption = null; +} - var stream = fs.createReadStream(filePath); - stream.pipe(res); -}).listen(8080); +function createGameResultStr() { + var result = gameResult(); + if (result === 1) { + return firstName + " won"; + } else if (result === 2) { + return secondName + " won"; + } else if (result === 3) { + return "tie"; + } +} +function gameResult() { + if (firstOption === "scissors") { + if (secondOption === "paper") { + return 1; + } else if (secondOption === "rock") { + return 2; + } else { + return 3; + } + } else if (firstOption === "paper") { + if (secondOption === "scissors") { + return 2; + } else if (secondOption === "rock") { + return 1; + } else { + return 3; + } + } else if (firstOption === "rock") { + if (secondOption === "scissors") { + return 1; + } else if (secondOption === "paper") { + return 2; + } else { + return 3; + } + } +}