Lös mazen med din mazerunner i bash
Du kommer få en färdig server, skriven i Node.js, och ett RESTful API till servern. Servern implementerar en maze. Servern är färdig och du kan testköra den via kommandot curl.
Din uppgift är att bygga en bash-klient till servern, enligt en kravspecifikation. Din klient skall använda servern för att lösa mazen.
#Förkunskaper
Du har gått igenom delen i guiden som handlar om Docker network. Du har koll på Bash-guiden. Du har bekantat dig med programmet curl.
#Introduktion
Läs kort på Wikipedia om vad en maze kan vara. Möjligen kan det vara inspirerat av boken/filmen med samma namn, The Maze Runner.
#Om servern maze
Servern maze finns i kursrepot. Där finns all källkod och en specifikation över serverns API.
Börja med att översiktligt bekanta dig med serverns API.
Så här kan du starta servern.
# Gå till kursrepot
cd example/maze
node index.js
Du kan testa maze-servern med curl. Så här.
Studera gärna källkoden till maze-servern. Hade du kunnat skriva den själv?
#Ta en kopia av Maze
Börja med att ta en kopia av koden i example/maze/
. Spara alla dina filer i katalogen me/kmom05/maze/server/
.
# Gå till kursrepot
cp -ri example/maze/{api.md,index.js,maze.js,maps,router.js} me/kmom05/maze/server/
Nu är du redo att starta din egen variant av maze-servern.
Du startar servern med $ node index.js
.
#Att spara spelets id till fil
Din klient behöver komma ihåg spelets id och vilket rum du står i. Du sparar den informationen enklast i fil. För att du skall slippa hantera JSON med bash, så har servern en möjlighet att leverera svaren som en komma-separerad sträng.
Testa att köra följande kommandon mot servern så ser du skillnaden.
curl localhost:1337/map
curl localhost:1337/map?type=csv
Det är alltså ?type=csv
som kan underlätta för din bash-klient som kommer att behöva parsa innehållet.
#Krav
Kraven består av två delar. Först skapar vi ett Bash-skript som körs mot servern. Sedan bygger vi in både servern och klienten i varsin container som pratar med varandra via ett eget nätverk.
#Bashscript för att lösa maze (del 1)
Skapa ett skript
mazerunner.bash
i mappenmaze/client/
. Gör scriptet exekverbart.Använd API:et för att lägga till följande funktioner i skriptet. Skriptet skall alltid skriva ut ett meddelande om det gick bra eller inte.
Kommando | Vad skall hända |
---|---|
./mazerunner.bash init |
Initiera ett spel och spara ned spelets id i en fil. |
./mazerunner.bash maps |
Visa vilka kartor som finns att välja bland. |
./mazerunner.bash select <#map> |
Välj en viss karta via siffra. |
./mazerunner.bash enter |
Gå in i första rummet. |
./mazerunner.bash info |
Visa information om rummet. |
./mazerunner.bash go north |
Gå till ett nytt rum, om riktningen stödjs. |
./mazerunner.bash go south |
Gå till ett nytt rum, om riktningen stödjs. |
./mazerunner.bash go east |
Gå till ett nytt rum, om riktningen stödjs. |
./mazerunner.bash go west |
Gå till ett nytt rum, om riktningen stödjs. |
Så här kan det se ut när du är klar.
#Mazerunner i docker (del 2)
Tanken är här att vi ska flytta in vår Mazerunner i Docker och de ska prata med varandra via ett eget nätverk. Allt ska starta via ett Bash-skript.
Skapa en Dockerfile i mappen
maze/server/
där du kopierar in din server i en container. Servern ska startas när containern startas. Bygg imagen och publicera den på Docker hub med namnetusername/vlinux-mazeserver:latest
. Byt ut username mot ditt egna användarnamn.Skapa en Dockerfile i mappen
maze/client/
där du kopierar in din Bash-klient. Bygg imagen och publicera den på Docker hub med namnetusername/vlinux-mazeclient:latest
. Byt ut username mot ditt egna användarnamn.Skapa ett exekverbart Bash-skript,
maze/kmom05.bash
. Skriptet ska göra följande:- Skapa ett nätverk med namet
dbwebb
. - Starta upp båda kontainrarna med rätt options.
- Servern ska även kunna nås via webbläsaren.
- Båda containrarna ska ha egna namn.
- Server-containern ska köras i bakgrunden.
- Klienten ska använda serverns namn. Du behöver då byta ut “localhost” i skriptet mot namnet du ger servern.
- Klient-containern ska starta i Bash och i den arbetsmappen du har skriptet i.
- Stoppa den/de containrar som är igång och ta bort nätverket.
- Skapa ett nätverk med namet
Så här kan det se ut när du är klar.
#Validera och publicera
Validera och publicera din kod enligt följande.
# Ställ dig i kurskatalogen
$ dbwebb validate maze
Rätta eventuella fel som dyker upp och publicera igen. När det ser grönt ut så är du klar.
#Extrauppgift
Det finns ingen extrauppgift.
#Tips från coachen
Strukturera din kod med funktioner i bash. Då får du en bra struktur i första delen och i andra delen så kan du återanvända funktionerna.
Lycka till och hojta till i chatten om du behöver hjälp!
#Revision history
- 2022-06-22: (A, lew) Uppdatering inför HT22.