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 |
133 REGISTER kalle
133 ERROR BAD-ARGUMENTS 134 REGISTER olle apa 134 REGISTERED olle 56 135 REGISTER olle apa 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 |
17 LOGIN olle
17 ERROR BAD-ARGUMENTS 18 LOGIN ollefoo apa 18 ERROR UNKNOWN-PLAYER 19 LOGIN olle apafoo 19 ERROR WRONG-PASSWORD 20 LOGIN olle apa 20 WELCOME 565 21 LOGIN olle apa 21 ERROR THIS-CLIENT-ALREADY-LOGGED-IN |
nummer LOGOUT |
nummer GOODBYE
nummer ERROR BAD-ARGUMENTS nummer ERROR NOT-LOGGED-IN |
899 LOGOUT
899 GOODBYE 900 LOGOUT 900 ERROR NOT-LOGGED-IN 901 LOGOUT jo jag vill 901 ERROR BAD-ARGUMENTS |
nummer I-AM-AT latitud longitud |
nummer OK
nummer ERROR BAD-ARGUMENTS nummer ERROR NOT-LOGGED-IN |
171 I-AM-AT 63.1225 15.494938388
171 OK 172 I-AM-AT -10 -20 172 OK 173 I-AM-AT 63.1225 173 ERROR BAD-ARGUMENTS 174 I-AM-AT 63.1225 181 174 ERROR BAD-ARGUMENTS 175 LOGOUT 175 GOODBYE 176 I-AM-AT 63.1225 15.494938388 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 |
1 WHAT-AM-I
1 YOU-ARE HUMAN 2 WHAT-AM-I really? 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 |
177 WHERE-AM-I
177 YOU-ARE-AT -10.0 -20.0 178 I-AM-AT -10 -20.1 178 OK 179 WHERE-AM-I 179 YOU-ARE-AT -10.0 -20.1 180 WHERE-AM-I foo 180 ERROR BAD-ARGUMENTS |
nummer SET-VISIBILITY avstånd |
nummer OK
nummer ERROR BAD-ARGUMENTS nummer ERROR NOT-LOGGED-IN |
66 SET-VISIBILITY 190
66 OK 67 SET-VISIBILITY -9 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 |
4711 LIST-VISIBLE-PLAYERS
4711 VISIBLE-PLAYERS 100000.0 3 4711 PLAYER olle HUMAN 30.1 30.1 4711 PLAYER charlie HUMAN 30.2 30.2 4711 PLAYER delta ZOMBIE 30.3 30.3 4712 LIST-VISIBLE-PLAYERS 1000 4712 ERROR BAD-ARGUMENTS 4713 SET-VISIBILITY 1000 4713 OK 4714 LIST-VISIBLE-PLAYERS 4714 VISIBLE-PLAYERS 1000.0 0 |
nummer TURN status |
nummer OK
nummer ERROR BAD-ARGUMENTS nummer ERROR CANNOT-TURN nummer ERROR NOT-LOGGED-IN |
67 TURN ZOMBIE
67 OK 68 TURN ZOMBIE 68 ERROR CANNOT-TURN 69 TURN ZOMBIE ZOMBIE ZOMBIE 69 ERROR BAD-ARGUMENTS 70 TURN HUMAN 70 OK |
nummer något-annat-kommando | nummer ERROR UNKNOWN-COMMAND |
189 SHUTDOWN
189 ERROR UNKNOWN-COMMAND |
något annat | ERROR MALFORMED-COMMAND |
hej hej
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).
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.
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". |