Lös mazen med din mazerunner i bash

By . Latest revision .

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)

  1. Skapa ett skript mazerunner.bash i mappen maze/client/. Gör scriptet exekverbart.

  2. 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.

  1. 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 namnet username/vlinux-mazeserver:1.0. Byt ut username mot ditt egna användarnamn.

  2. 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 mappen maze/client/ där du kopierar in din Bash-klient. Bygg imagen och publicera den på Docker hub med namnet username/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.

Document source.

Category: vlinux.