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:1.0
. Byt ut username mot ditt egna användarnamn.I nästa uppgift (dockerhub.bash) ska du användadig av namn på containrarna. Fundera ut ett bra namn på din servercontainer och uppdatera ditt script och byt ut
localhost
mot ditt nya servernamn. Då slipper du bygga om din image i nästa uppgift. Skapa en Dockerfile i mappenmaze/client/
där du kopierar in din Bash-klient. Bygg imagen och publicera den på Docker hub med namnetusername/vlinux-mazeclient:1.0
. Byt ut username mot ditt egna användarnamn.
#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
- 2023-09-13: (B, lew) Uppdatering inför HT23.
- 2022-06-22: (A, lew) Uppdatering inför HT22.