Erinevus lehekülje "ITI0205 2020 4 iseseisev töö" redaktsioonide vahel
(ei näidata sama kasutaja 17 vahepealset redaktsiooni) | |||
1. rida: | 1. rida: | ||
== ITI0205 4. iseseisev töö: NodeJS rakendus == | == ITI0205 4. iseseisev töö: NodeJS rakendus == | ||
− | Iseseisva töö eesmärk on täiendada Yahtzeed nii, et sellele ehitada NodeJS tagarakendus, nii et seda oleks võimalik mängida kahe mängija poolt üle võrgu. Soovituslik on kasutada ExpressJS raamistikku. | + | Iseseisva töö eesmärk on täiendada Yahtzeed nii, et sellele ehitada NodeJS tagarakendus, nii et seda oleks võimalik mängida kahe mängija poolt üle võrgu. Soovituslik on kasutada ExpressJS raamistikku. Juhul kui kuulad kursust mõnest varasemast aastast ja punktid selle praktikumi eest kanti üle võid kasutada enda, rakenduse loogika jääb samaks. |
Rakendus on vaja paigaldada turing.cs.ttu.ee serverisse aadressile http://turing.cs.ttu.ee/~uni-id/prax4 ja rakenduse lähtekood Gitlab.cs.ttu.ee kesskkonda. | Rakendus on vaja paigaldada turing.cs.ttu.ee serverisse aadressile http://turing.cs.ttu.ee/~uni-id/prax4 ja rakenduse lähtekood Gitlab.cs.ttu.ee kesskkonda. | ||
9. rida: | 9. rida: | ||
Üks lihtne variant ehitamiseks on selline, kus veebileht end vastase käiku oodates kord sekundis refreshib ja seisu hoitakse lihtsalt failis ühe json-i formaadis: | Üks lihtne variant ehitamiseks on selline, kus veebileht end vastase käiku oodates kord sekundis refreshib ja seisu hoitakse lihtsalt failis ühe json-i formaadis: | ||
− | * server kuvab algul veebilehe, kus saad sisestada nimeväljale oma nime ja | + | * server kuvab algul veebilehe, kus saad sisestada nimeväljale oma nime ja käikude arvu. |
* serveril on üks seisufail, kuhu ta kirjutab mängu seisu - käigu, kombinatsioonid ja punktisumma | * serveril on üks seisufail, kuhu ta kirjutab mängu seisu - käigu, kombinatsioonid ja punktisumma | ||
* kui server saab päringu a’la POST name=martin&turn=1&dice=1,4,1,1,1 | * kui server saab päringu a’la POST name=martin&turn=1&dice=1,4,1,1,1 | ||
25. rida: | 25. rida: | ||
# Mitme mängija toe lisamine on kohustuslik ja annab 8 punkti | # Mitme mängija toe lisamine on kohustuslik ja annab 8 punkti | ||
− | # Lisaks mitmemängija toele on salvestatakse ka edetabel serverisse, s.t on nähtav kõigile rakenduse kasutajatele sõltumata sellest millisest arvutist nad seda vaatavad. See annab | + | # Lisaks mitmemängija toele on salvestatakse ka edetabel serverisse, s.t on nähtav kõigile rakenduse kasutajatele sõltumata sellest millisest arvutist nad seda vaatavad. See annab 4 punkti. |
− | # Lisaks annab 3 punkti kui salvestad edetabeli mitte serveris olevasse faili vaid andmebaasi, | + | # Lisaks annab 3 punkti kui salvestad edetabeli mitte serveris olevasse faili vaid andmebaasi, serveris olemas MySQL, aga saad soovi korral kasutada kas SQLite või mõnda muud eraldiseisvat andmebaasimootorit. Turingu serveris töötab hästi MySQL2 nimeline teek: https://www.npmjs.com/package/mysql2. Kui SQL päringuid kirjutada ei taha, siis head tööriistad on Bookshelf.js https://bookshelfjs.org/ või Sequelize: https://sequelize.org/ |
+ | # Kui ehitad RESTi asemel rakenduse Socket.io peale saad 1 lisapunkti | ||
'''Lisaks:''' | '''Lisaks:''' | ||
36. rida: | 37. rida: | ||
'''Soovitusi''' | '''Soovitusi''' | ||
− | Arendamiseks piisab kahest eraldi tabist ühes brauseris | + | Arendamiseks piisab kahest eraldi tabist ühes brauseris - selleks ei ole vaja mitut reaalset inimest. |
+ | |||
+ | == Millises järjekorras asju teha == | ||
+ | |||
+ | 1. Kõigepealt tõsta oma prax2 tehtud mäng prax4 kataloogi, sellega on algus tehtud. | ||
+ | |||
+ | 2. Kui mitmemängija tuge veel realiseeritud ei ole tee see ära (vt. 2 praktikumitöö juhendit) | ||
+ | |||
+ | 3. Vaata, millised on seal osad mis on jagatud kahe kasutaja vahel (mängu olek, käigud, edetabel). Nende hoidmine ja haldamine hakkaks edaspidi toimuma Node.js tagarakenduses. Et järge paremini hoida dokumenteeri see enda jaoks tekstifailis, kujul: | ||
+ | <pre> | ||
+ | GET /games List active games | ||
+ | GET /scoreboard Get scoreboard data | ||
+ | </pre> | ||
+ | Sellist minimalistlikku tekstifaili on hea väikese vaevaga hallata. | ||
+ | |||
+ | 4. Esimese sammuna võiksid andmeobjektid tõsta staatilistesse JSON failidesse nt /prax4/api/ kataloogi ja proovida neid sealt lugeda kasutades <code>fetch APIt</code>. Sellega tekib esmane ülevaade milliseid andmeid on vaja lugeda (ja hiljem kirjutada), salvesta API endpoint mingusse muutujasse, nt <code>const api_url = '/prax4/api/'</code> | ||
+ | |||
+ | 5. Nüüd tekita Nodejs rakendus mis oleks ehitatud nii et tagastaks päringule täpselt samu JSONi faile. Asenda <code>'api_url'</code> muutja esirakenduses enda lokaalse NodeJS rakenduse aadressiga. Et hiljem sellele vähem mõelda võiksid juba praegu määrata Node rakenduse jooksma oma turingu-serveri pordile. | ||
+ | |||
+ | 6. Nüüd realiseeri node rakenduses andmete kirjutamine ja dünaamiline andmete tagastamine. | ||
+ | |||
+ | == Soovituslik arhitektuur == | ||
+ | |||
+ | * `http://turing.cs.ttu.ee/~uni_id/prax4/` asub esirakendus mis on kasutajale brauserist kättesaadav. | ||
+ | * `http://turing.cs.ttu.ee:minu_node_port` asub node tagarakendus, mis vastab esirakenduste päringutele. | ||
+ | |||
+ | == Rakenduse vaatamine ja paigaldamine serverisse == | ||
+ | |||
+ | Selleks, et saaks kasutada NodeJS jaoks erinevaid porte, on nii et kõige mõistlikum kasutada [https://en.wikipedia.org/wiki/SOCKS SOCKS proxyt]. Juhend SOCKS proxy tekitamiseks Turingu serveris on [[ SOCKS proxy Turingu Serveris | on siin ]]. | ||
+ | |||
+ | Et veenduda et proxy/brauser on õigesti konfigureeritud mine aadressile http://turing.cs.ttu.ee:3030/. Peaksid seal nägema teadet "Olen tulemüüri taga :D" |
Viimane redaktsioon: 14. detsember 2020, kell 18:25
ITI0205 4. iseseisev töö: NodeJS rakendus
Iseseisva töö eesmärk on täiendada Yahtzeed nii, et sellele ehitada NodeJS tagarakendus, nii et seda oleks võimalik mängida kahe mängija poolt üle võrgu. Soovituslik on kasutada ExpressJS raamistikku. Juhul kui kuulad kursust mõnest varasemast aastast ja punktid selle praktikumi eest kanti üle võid kasutada enda, rakenduse loogika jääb samaks.
Rakendus on vaja paigaldada turing.cs.ttu.ee serverisse aadressile http://turing.cs.ttu.ee/~uni-id/prax4 ja rakenduse lähtekood Gitlab.cs.ttu.ee kesskkonda.
Kaks mängijat peavad saama käia kumbki oma brauseris vaheldumisi ja kui mõlemad käinud, näidatakse kummalegi, kes võitis ja alustatakse uuesti. Sisselogimist ei ole vaja teha. Võimalik on korduvkasutada 2. praktikumitöö CSSi
Üks lihtne variant ehitamiseks on selline, kus veebileht end vastase käiku oodates kord sekundis refreshib ja seisu hoitakse lihtsalt failis ühe json-i formaadis:
- server kuvab algul veebilehe, kus saad sisestada nimeväljale oma nime ja käikude arvu.
- serveril on üks seisufail, kuhu ta kirjutab mängu seisu - käigu, kombinatsioonid ja punktisumma
- kui server saab päringu a’la POST name=martin&turn=1&dice=1,4,1,1,1
- seisufail on tühi: server loob uue seisufaili ja annab tagasi htmli, mis ütleb “oota” ja refreshib sekundi järel, saates serverile päringu a la ?state=waiting
- seisufailis on juba valitud kohal käik, siis seisufaili ei kirjutata vaid kasutaja peab uuesti proovima ?turn=player2&state=retry
- Siis kontrollitakse kas käik on läbi ja saab määrata punkte.
- Kui punktid on antud antakse mäng edasi teisele mängijale turn=playe2&state=waiting
- Kui kõik käigud on tehtud, siis see mängija kes sai rohkem punkte on võitja. Seda näidatakse mõlemale kasutajale.
Pane tähele, et see lihtne skeem võib minna rikki, kui peale eelmise mängu tulemuse saamist väga kiiresti uue käigu teed: võib juhtuda, et vastase leht ei jõua enne refreshida ja tulemust näidata, kui sinu käik juba seisu üle salvestab.
Sa võid ehitada oma rakenduse ka mingi hoopis teistsuguse skeemi järgi.
Punktide arvestus
- Mitme mängija toe lisamine on kohustuslik ja annab 8 punkti
- Lisaks mitmemängija toele on salvestatakse ka edetabel serverisse, s.t on nähtav kõigile rakenduse kasutajatele sõltumata sellest millisest arvutist nad seda vaatavad. See annab 4 punkti.
- Lisaks annab 3 punkti kui salvestad edetabeli mitte serveris olevasse faili vaid andmebaasi, serveris olemas MySQL, aga saad soovi korral kasutada kas SQLite või mõnda muud eraldiseisvat andmebaasimootorit. Turingu serveris töötab hästi MySQL2 nimeline teek: https://www.npmjs.com/package/mysql2. Kui SQL päringuid kirjutada ei taha, siis head tööriistad on Bookshelf.js https://bookshelfjs.org/ või Sequelize: https://sequelize.org/
- Kui ehitad RESTi asemel rakenduse Socket.io peale saad 1 lisapunkti
Lisaks:
- HTML ja CSS peaksid olema eraldi. Nii on sul mugav seda hallata ja muuta.
- Lehtede HTML peaks olema valideeruv ja javascripti kasutamisel ei tohi konsoolis olla veateateid.
- Leht ei tohi välja näha väga jube. Vaata ka: [[1]]
Soovitusi
Arendamiseks piisab kahest eraldi tabist ühes brauseris - selleks ei ole vaja mitut reaalset inimest.
Millises järjekorras asju teha
1. Kõigepealt tõsta oma prax2 tehtud mäng prax4 kataloogi, sellega on algus tehtud.
2. Kui mitmemängija tuge veel realiseeritud ei ole tee see ära (vt. 2 praktikumitöö juhendit)
3. Vaata, millised on seal osad mis on jagatud kahe kasutaja vahel (mängu olek, käigud, edetabel). Nende hoidmine ja haldamine hakkaks edaspidi toimuma Node.js tagarakenduses. Et järge paremini hoida dokumenteeri see enda jaoks tekstifailis, kujul:
GET /games List active games GET /scoreboard Get scoreboard data
Sellist minimalistlikku tekstifaili on hea väikese vaevaga hallata.
4. Esimese sammuna võiksid andmeobjektid tõsta staatilistesse JSON failidesse nt /prax4/api/ kataloogi ja proovida neid sealt lugeda kasutades fetch APIt
. Sellega tekib esmane ülevaade milliseid andmeid on vaja lugeda (ja hiljem kirjutada), salvesta API endpoint mingusse muutujasse, nt const api_url = '/prax4/api/'
5. Nüüd tekita Nodejs rakendus mis oleks ehitatud nii et tagastaks päringule täpselt samu JSONi faile. Asenda 'api_url'
muutja esirakenduses enda lokaalse NodeJS rakenduse aadressiga. Et hiljem sellele vähem mõelda võiksid juba praegu määrata Node rakenduse jooksma oma turingu-serveri pordile.
6. Nüüd realiseeri node rakenduses andmete kirjutamine ja dünaamiline andmete tagastamine.
Soovituslik arhitektuur
- `http://turing.cs.ttu.ee/~uni_id/prax4/` asub esirakendus mis on kasutajale brauserist kättesaadav.
- `http://turing.cs.ttu.ee:minu_node_port` asub node tagarakendus, mis vastab esirakenduste päringutele.
Rakenduse vaatamine ja paigaldamine serverisse
Selleks, et saaks kasutada NodeJS jaoks erinevaid porte, on nii et kõige mõistlikum kasutada SOCKS proxyt. Juhend SOCKS proxy tekitamiseks Turingu serveris on on siin .
Et veenduda et proxy/brauser on õigesti konfigureeritud mine aadressile http://turing.cs.ttu.ee:3030/. Peaksid seal nägema teadet "Olen tulemüüri taga :D"