Här är ett utkast till hur den skulle kunna se ut:
Den inloggade spelaren tompa syns i mitten. Två andra spelare, alpha och bravo är zombier. Spelaren charlie är människa.
De krav som klienten ska uppfylla finns beskrivna längre ner.
Regler:
Här är de kommandon som klienten kan skicka till servern, tillsammans med de svar som servern kan skicka. Alla data mellan klient och server skickas som strängar, med varje kommando och varje svar på en egen rad. (Undantaget är kommandot LIST-VISIBLE-PLAYERS, där svaret kan bestå av flera rader.)
Det nummer som skickas före varje kommando är bara ett löpnummer, som servern skickar tillbaka. Om servern har mycket att göra kan det hända att den inte hinner svara direkt på ett kommando, och då kan klienten använda löpnumret för att veta vilket kommando ett serversvar hör ihop med. Servern använder inte det löpnumret till något, förutom att skicka tillbaka det, och förmodligen behöver du inte använda det heller. Det får vara samma hela tiden, men det måste vara med.
(Observera att servern dessutom ibland skickar ut meddelanden till klienterna på eget bevåg, så kallade asynkrona meddelanden. Dessa meddelanden börjar med ordet ASYNC, och beskrivs i en annan tabell längre ner.)
Klienten skickar | Servern svarar | Exempeldialog |
---|---|---|
nummer REGISTER namn lösenord |
nummer REGISTERED spelarnummer
nummer ERROR BAD-ARGUMENTS nummer ERROR NAME-ALREADY-REGISTERED |
Klienten: 133 REGISTER kalle
Servern: 133 ERROR BAD-ARGUMENTS K: 134 REGISTER olle apa S: 134 REGISTERED olle 56 K: 135 REGISTER olle apa S: 135 ERROR NAME-ALREADY-REGISTERED |
nummer LOGIN namn lösenord |
nummer WELCOME spelarnummer
nummer ERROR BAD-ARGUMENTS nummer ERROR UNKNOWN-PLAYER nummer ERROR WRONG-PASSWORD nummer ERROR THIS-CLIENT-ALREADY-LOGGED-IN nummer ERROR THAT-PLAYER-ALREADY-LOGGED-IN |
K: 17 LOGIN olle
S: 17 ERROR BAD-ARGUMENTS K: 18 LOGIN ollefoo apa S: 18 ERROR UNKNOWN-PLAYER K: 19 LOGIN olle apafoo S: 19 ERROR WRONG-PASSWORD K: 20 LOGIN olle apa S: 20 WELCOME 565 K: 21 LOGIN olle apa S: 21 ERROR THIS-CLIENT-ALREADY-LOGGED-IN |
nummer LOGOUT |
nummer GOODBYE
nummer ERROR BAD-ARGUMENTS nummer ERROR NOT-LOGGED-IN |
K: 899 LOGOUT
S: 899 GOODBYE K: 900 LOGOUT S: 900 ERROR NOT-LOGGED-IN K: 901 LOGOUT jo jag vill S: 901 ERROR BAD-ARGUMENTS |
nummer I-AM-AT latitud longitud |
nummer OK
nummer ERROR BAD-ARGUMENTS nummer ERROR NOT-LOGGED-IN |
K: 171 I-AM-AT 63.1225 15.494938388
S: 171 OK K: 172 I-AM-AT -10 -20 S: 172 OK K: 173 I-AM-AT 63.1225 S: 173 ERROR BAD-ARGUMENTS K: 174 I-AM-AT 63.1225 181 S: 174 ERROR BAD-ARGUMENTS K: 175 LOGOUT S: 175 GOODBYE K: 176 I-AM-AT 63.1225 15.494938388 S: 176 ERROR NOT-LOGGED-IN |
nummer WHAT-AM-I |
nummer YOU-ARE HUMAN
nummer YOU-ARE ZOMBIE nummer ERROR BAD-ARGUMENTS nummer ERROR NOT-LOGGED-IN |
K: 1 WHAT-AM-I
S: 1 YOU-ARE HUMAN K: 2 WHAT-AM-I really? S: 2 ERROR BAD-ARGUMENTS |
nummer WHERE-AM-I |
nummer YOU-ARE-AT latitud longitud
nummer ERROR BAD-ARGUMENTS nummer ERROR UNKNOWN-POSITION nummer ERROR NOT-LOGGED-IN |
K: 177 WHERE-AM-I
S: 177 YOU-ARE-AT -10.0 -20.0 K: 178 I-AM-AT -10 -20.1 S: 178 OK K: 179 WHERE-AM-I S: 179 YOU-ARE-AT -10.0 -20.1 K: 180 WHERE-AM-I foo S: 180 ERROR BAD-ARGUMENTS |
nummer SET-VISIBILITY avstånd |
nummer OK
nummer ERROR BAD-ARGUMENTS nummer ERROR NOT-LOGGED-IN |
K: 66 SET-VISIBILITY 190
S: 66 OK K: 67 SET-VISIBILITY -9 S: 67 ERROR BAD-ARGUMENTS |
nummer LIST-VISIBLE-PLAYERS |
nummer VISIBLE-PLAYERS avstånd antal
(följt av spelarnas positioner, en per rad) nummer ERROR BAD-ARGUMENTS nummer ERROR UNKNOWN-POSITION nummer ERROR NOT-LOGGED-IN |
K: 4711 LIST-VISIBLE-PLAYERS
S: 4711 VISIBLE-PLAYERS 100000.0 3 S: 4711 PLAYER olle HUMAN 30.1 30.1 S: 4711 PLAYER charlie HUMAN 30.2 30.2 S: 4711 PLAYER delta ZOMBIE 30.3 30.3 K: 4712 LIST-VISIBLE-PLAYERS 1000 S: 4712 ERROR BAD-ARGUMENTS K: 4713 SET-VISIBILITY 1000 S: 4713 OK K: 4714 LIST-VISIBLE-PLAYERS S: 4714 VISIBLE-PLAYERS 1000.0 1 S: 4711 PLAYER olle HUMAN 30.1 30.1 |
nummer TURN status |
nummer OK
nummer ERROR BAD-ARGUMENTS nummer ERROR CANNOT-TURN nummer ERROR NOT-LOGGED-IN |
K: 67 TURN ZOMBIE
S: 67 OK K: 68 TURN ZOMBIE S: 68 ERROR CANNOT-TURN K: 69 TURN ZOMBIE ZOMBIE ZOMBIE S: 69 ERROR BAD-ARGUMENTS K: 70 TURN HUMAN S: 70 OK |
nummer något-annat-kommando | nummer ERROR UNKNOWN-COMMAND |
K: 189 SHUTDOWN
S: 189 ERROR UNKNOWN-COMMAND |
något annat | ERROR MALFORMED-COMMAND |
K: hej hej
S: ERROR MALFORMED-COMMAND |
Det flesta kommandona är ganska självförklarande, utom kanske TURN och LIST-VISIBLE-PLAYERS:
Servern skickar ibland ut meddelanden till klienterna på eget bevåg, så kallade asynkrona meddelanden. Dessa meddelanden börjar med ordet ASYNC, och beskrivs i tabellen nedan. Klienten ska inte svara på dessa meddelanden.
Servern skickar | Exempel |
---|---|
ASYNC YOU-ARE ZOMBIE | ASYNC YOU-ARE ZOMBIE |
ASYNC YOU-ARE HUMAN | ASYNC YOU-ARE HUMAN |
ASYNC PLAYER namn status latitud longitud |
ASYNC PLAYER olle HUMAN 30.0 30.0
ASYNC PLAYER anna HUMAN 30.001 30.002 ASYNC PLAYER anna ZOMBIE 30.001 30.002 |
ASYNC PLAYER namn GONE | ASYNC PLAYER olle GONE |
När en spelare förvandlats till människa eller zombie, får den spelaren ett asynkront YOU-ARE-meddelande.
När en spelare förvandlats till människa eller zombie, eller flyttat på sig, skickas asynkrona PLAYER-meddelanden ut till alla spelare. GONE-varianten av PLAYER-meddelandet används när en spelare inte längre syns (för att hon loggat ut, eller kommit längre bort än synlighetsgränsen).
En dumhet: Observera att i protokollet skickas alltid latituden först, följt av longituden. Kommandot geo fix till emulatorn tar däremot longituden först, följt av latituden.
Den här desktop-klienten körs alltså inte på Android, utan på en vanlig dator. Den har ett huvudfönster, där man bland annat kan logga in, och skriva in (simulerade) kartkoordinater:
Om man klickar på knappen Show map, visas en karta, som påminner om den karta som det ingår i uppgiften att skapa, men då alltså under Android:
Med knappen Show com log kan man få fram ett fönster där kommunikationen mellan klienten och servern visas:
Här kan vi se hur klienten skickat kommandot LIST-VISIBLE-PLAYERS, och fått ett svar med VISIBLE-PLAYERS om att det finns 4 spelare inom synhåll, som är 1000 meter. Sen listas de fyra spelarna, och den första av dem, tompa, är den inloggade spelaren själv.
Efter att vi fått detta svar från servern, har det kommit två asynkrona meddelanden från servern med nya positioner för spelaren bravo. Om en synlig spelare flyttar sig, eller förvandlas mellan zombie och människa, får man alltid asynkrona meddelanden om det. Om man låter klienten komma ihåg den mottagna informationen, slipper man därför skicka en ny VISIBLE-PLAYERS varje gång man ska rita upp kartan.
Det behövs ingen formell labbrapport, men om det är något som inte framgår direkt, till exempel hur man använder den inskickade appen eller vad utmatningen betyder, behövs det någon form av beskrivning. (Och underskatta inte min förmåga att inte begripa.)
Om samarbete: Varje student ska göra en egen lösning, och skicka in den, men det är inte förbjudet att samarbeta eller fråga andra studenter om hjälp. Däremot ska man i så fall tydligt ange vilka som man samarbetat med. |
Skriv gärna i ärenderaden på brevet vilken kurs det handlar om, till exempel "Android-uppgift 5", och inte bara "Uppgift 5". |