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 kunskaper motsvarande de som hanteras i uppgiften “Skapa en RESTful HTTP-server med Node.js och klient i Bash”.

#Introduktion

Läs kort på Wikipedia om vad en maze kan vara.

Så här kan det se ut när du löser mazen med ditt skript, skriptet som i detta fallet heter mazerunner.sh. Möjligen kan det vara inspirerat av boken/filmen med samma namn, The Maze Runner.

Så kan det alltså se ut.

#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/nodejs/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/nodejs/maze. Spara alla dina filer i katalogen me/kmom05/maze.

# Gå till kursrepot
cp -ri example/nodejs/maze/{api.md,index.js,maze.js,maps} me/kmom05/maze

Kopiera sedan den router som maze-servern använder sig av.

# Gå till kursrepot
cp -i example/nodejs/router/router.js me/kmom05/maze

Ändra sedan sökvägen för var router-modulen hittas, gör ändringen i maze.js.

//const Router = require("../router/router");
const Router = require("./router");

Nu är du redo att starta din egen variant av maze-servern.

#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

#Bashscript för att lösa maze

  1. Skapa ett skript mazerunner.bash. Sätt rättigheter på skriptet till 755. Skapa en symbolisk länk mazerunner som pekar på filen mazerunner.bash.

  2. Skriptet skall läsa av environment-variabeln LINUX_PORT och, om variabeln är definierad, använda dess innehåll som portnummer att koppla upp sig mot. Standardvärde skall vara 1337.

  3. Skriptet skall läsa av environment-variabeln LINUX_SERVER och, om variabeln är definierad, använda dess innehåll som adress till servern. Standardvärde skall vara localhost.

  4. 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 init Initiera ett spel och spara ned spelets id i en fil.
./mazerunner maps Visa vilka maps som finns att välja bland.
./mazerunner select <map> Välj en viss karta.
./mazerunner enter Gå in i första rummet.
./mazerunner info Visa information om rummet.
./mazerunner go north Gå till ett nytt rum, om riktningen stödjs.
./mazerunner go south Gå till ett nytt rum, om riktningen stödjs.
./mazerunner go east Gå till ett nytt rum, om riktningen stödjs.
./mazerunner go west Gå till ett nytt rum, om riktningen stödjs.

Så här kan det se ut när du är klar.

#Bashscript i loop

  1. Utöka funktionaliteten i mazerunner.bash så att allt sker i en loop när man startar programmet med ./mazerunner loop. Skriptet skall börja med att initiera ett nytt spel och visa vilka kartor som finns. Spelaren kan då välja en karta varpå spelaren träder in i första rummet. Därefter fortsätter loopen och väntar på att spelaren skriver in riktningen north, south, east, west, eller help för en hjälptext eller quit för att avsluta.

Så här kan det se ut, ungefär.

#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 forumet om du behöver hjälp!

#Revision history

  • 2017-02-21: (D, mos) Exempelprogram till node, LINUX_PORT på server och PID till fil samt måste flytta maze till egen katalog, förbered för vt18.
  • 2016-06-04: (C, mos) Lade till krav på servern om LINUX_PORT + LINUX_SERVER
  • 2015-10-16: (B, mos) Stycke om att kopiera routern, bytte namn på mazerunner.sh till mazerunner.bash.
  • 2015-09-02: (A, mos) Första utgåvan i samband med kursen linux.

Document source.

Category: unix.