Skip to content
docksider edited this page Sep 14, 2010 · 2 revisions

saxat till en bättre ordning än den på tddc68 hemsidan!

Session

MS = Master Server
SC = Student Client

  1. Login (SC → MS och MS → SC)
  2. Nickmeddelande (SC → MS)
  3. Delbeskrivningsmeddelande (MS → SC)
  4. Figurbeskrivningsmeddelande (MS → SC)
  5. Antingen:
    Rotations- och placeringsmeddelande (SC → MS)
    eller:
    Meddelande som anger att man ger upp (SC → MS)
  6. Resultatmeddelande (MS → SC)
  7. Så länge det finns fler figurer att lösa (som servern kan leverera)
    upprepa från punkt 4. Annars fortsätt med punkt 8.
  8. Avslutningsmeddelande (MS → SC)

Fem sekunder efter det att MS har utfört punkt 8 “klipps” förbindelsen
med denna SC (om SC inte har klippt denna innan tiden gått ut).

Paket

Generellt meddelande (uppbyggnad)

Uppbyggnaden av ett meddelande (förutom loginmeddelandet) oavsett om det skickas från MS eller SC:

“[timestamp] [header] [body]”

Beskrivning av ovanstående:

[timestamp] = Ett klockslag givet på formen
“[HH]:[MM]:[SS]”. Detta är serverns sätt att
tala om för klienterna vad den aktuella tiden
i servern är. Tidsstämplar på meddelanden
som kommer in till servern kommer att
ignoreras men behöver ändå finnas där.

[HH] = Timdelen i klockslaget (00-23).
[MM] = Minutdelen i klockslaget (00-59).
[SS] = Sekunddelen i klockslaget (00-59).

[header] = Alltid är en character som anger vilken typ
av meddelande det är som följer.

[body] = Själva meddelandet. Beroende på vad det är
för meddelande, kan vara allt från integer
och characters till strängar. När meddelandet
skickas är det viktigt att allt slås ihop
till en sträng.

Varje del av [body] separeras med EXAKT ett blanktecken (se exemplen
för respektive meddelande nedan).

OBS! [header] och [body] separeras med exakt ett blanktecken precis som
data internt i [body].

OBS! Tänk på att aldrig skicka ett heltal som är större än 8 tecken
(talen skall inte behöva bli så stora).

Login

Vid uppkoppling mot server skall logininformation skickas. Detta är en speciell typ av meddelande som inte upprepas senare i protokollet:

SC till MS: “userid”

SC till MS: “password”
Detta lösenord är INTE det ordinarie lösenord som ni har
till ert eget konto. Det är ett lösenord som den som har
servern bestämmer. Lämpligt är att man har en fil som
innehåller “userid:password” (en rad per användare) som
servern läser in vid uppstart.

MS till SC: “OK” / “REJECTED
Om “OK” är inloggningen ok, annars accepterades inte denna
användare av något skäl (fel lösenord eller ogiltig
användare eller kanske har servern satt denna användare som
ogiltig trots att den existerar).

Efter login måste man dessutom skicka ett “nick”-meddelande (se nedan) till servern för att tala om vad man vill heta under tävlingen (som avslutar demonstrationen). När man har gjort detta är uppkopplingsfasen avklarad.

Nickmeddelande (SC → MS)

[time] = Ett klockslag. Har ingen betydelse vilket.

[header] = ‘N’

[body] = En sträng som talar om vad din klient skall heta.

Exempel: Antag att vi vill att klienten skall heta ‘blixten’.
“13:00:27 N blixten”

Delbeskrivningsmeddelande (MS → SC)

Detaljbeskrivning av hur de delar (“parts”) som skall användas, för att försöka lösa de figurer som senare skickas ut, ser ut. De delar som skickas ut antas ligga så att alla detaljer i delen har positiva positioner i koordinatsystemet. Den nedersta position som ligger längst till vänster i det främsta lagret av delen anses ligga i origo (oavsett om det är en 0- eller 1-markerad detalj). Delen är inte roterade eller flyttad när den skickas.

[time] = Ett klockslag.

[header] = ‘D’

[body] = “[no of parts] [part no 1] [part no 2] …”

[no of parts] = Ett heltal som anger antalet delar som kommer att
beskrivas.

[part no #] = “[dimension] [list of details of part]”

[dimension] = “[X]x[Y]x[Z]”, där [X], [Y] och [Z] anger antalet
detaljer i denna del i respektive riktning.

[list of details of part] = En lista/sekvens med 0:or och 1:or
som representerar tomma och fyllda
platser i denna del.

Exempel: Antag att vi har en beskrivningsfil för delarna som ser
ut på följande sätt:
# Part: 1
Dimensions: 2×2×1
1 1
1 0

# Part: 2
Dimensions: 2×2×2
1 1
0 0

0 1
0 1

Följande sträng skall då skickas (tiden är dock inte
densamma alltid):
“13:01:32 D 2 2×2×1 1110 2×2×2 11000101”

Rotations- och placeringsmeddelande (SC → MS)

Rotations- och placeringsinformation för de delar som (skall) placeras ut i figuren.

[time] = Ett klockslag.

[header] = ‘P’

[body] = “[no of parts] [part no 1] [part no 2] …”

[no of parts] = Ett heltal som anger antalet delar som skickas.

[part no #] = “! [rot x] [rot y] [rot z] [tra x] [tra y] [tra z]”

[rot #] = Ett heltal i intervallet [0, 3] som anger antalet
90-graders rotationer man gjort “medsols” runt
#-axeln. Det är viktigt att alla rotationer måste
utföras från ursprungsdelen enligt metoden “först
alla rotationer kring x-axeln, sen y-axeln, sist
z-axeln” i ditt program för att resultatet skall bli
rätt.

[tra #] = Ett heltal som anger hur långt från
ursprungspositionen i #-led man förflyttat denna del.

Exempel: Antag att del nummer 1 har roterats 180 grader runt x-axeln,
270 grader runt y-axeln och 90 grader runt z-axeln samt
förflyttat den 3 positioner i x-led, -2 positioner i y-led och
0 positioner i z-led. Motsvarande för del nummer 2 är 0 grader,
90 grader, 0 grader, 0, 3 och -4 positioner.
Detta skulle resultera i att man skickar följande data:
“13:02:45 P 2 ! 2 3 1 3 -2 0 ! 0 1 0 0 3 -4”

Figurbeskrivningsmeddelande (MS → SC)

Detaljbeskrivning av hur den figur som delarna skall sammanfogas till ser ut. De figurer som skickas ut antas ligga så att alla detaljer i figuren har positiva positioner i koordinatsystemet. En av detaljerna ligger dessutom i origo.

[time] = Ett klockslag.

[header] = ‘F’

[body] = “[figure no] [figure description]”

[figure no] = Ett heltal som anger figurens nummer.

[figure description] = “[dimension] [list of details of figure]”

[dimension] = “[X]x[Y]x[Z]”, där [X], [Y] och [Z] anger antalet
detaljer i denna del i respektive riktning.

[list of details of figure] = En lista/sekvens med 0:or och 1:or
som representerar tomma och fyllda
platser i denna figur.

Exempel: Antag att vi har en beskrivningsfil för figurerna där en av
figurerna (figur nummer 12) har följande information:
# Part: 12
Dimensions: 3×4×2
1 1 0
1 0 1
0 1 1
1 1 1

1 0 1
1 1 1
0 0 0
0 0 1

Följande sträng skall då skickas (tiden är dock inte
densamma alltid):
“13:00:54 F 12 3×4×2 110101011111101111000001”

Meddelande som anger att man ger upp (SC → MS)

Om en SC inte klarar av att finna en lösning och upptäcker detta på egen hand kan den skicka in följande meddelande till servern.

[time] = Ett klockslag.

[header] = ‘G’

[body] = “[figure no]”

[figure no] = Ett heltal som anger figurens nummer.

Exempel: SC klarar inte av att lösa figur nummer 12.
“13:02:00 G 12”

Resultatmeddelande (MS → SC)

När en SC har skickat in ett förslag på lösning måste MS meddela om denna lösning är korrekt eller ej. Oavsett vilket resultat som fås tillbaka till SC anser MS att den SC som skickat in sitt försök är klar med den figuren (d.v.s. det finns inte fler inskickningsförsök på samma figur för en SC).

[time] = Ett klockslag.

[header] = ‘R’

[body] = “[figure no] [result]”

[figure no] = Ett heltal som anger figurens nummer.

[result] = “Passed” (korrekt lösning), “Ignored” (ej inskickad
lösning) eller “Failed” (ej korrekt lösning).

Exempel 1: Den lösning SC skickat in är felaktig:
“13:02:01 R 12 Failed”

Exempel 2: SC har avböjt att skicka in en lösning (har givit upp).
“13:02:01 R 12 Ignored”

Exempel 3: Den lösning SC skickat in är korrekt:
“13:02:01 R 12 Passed”

Avslutningsmeddelande (MS → SC)

Om en SC inte klarar av att finna en lösning och upptäcker detta på egen hand är MS inte har fler figurer att skicka ut till SC skall följande meddelande skickas.

[time] = Ett klockslag.

[header] = ‘Q’

[body] = “[no of solved figures] [place]”

[no of solved figures] = Ett heltal som anger hur många figurer som MS
har registrerat att SC har klarat av.

[place] = Ett heltal som anger placeringen.

Exempel: SC har klarat 9 figurer och kom med detta på 3:e plats.
“13:03:00 Q 9 3”