protocol.txt (8320B)
1 New Game server - Protocol Documentatie 2021 2 3 Auteurs: Hilko Janssen, Remi Reuvekamp, Gertjan Haan, Timo Strating 4 Onder begeleiding van: Bas Heijne 5 Gemaakt in opdracht voor: Lech Bialek 6 --------------------------------------------- 7 8 9 !!! Dit project wat je nu aan het bekijken bent is een 2de iteratie van een oude server. De oude server was heel erg 10 strict in het hanteren van het protocol. Daarnaast verstuurde het ook dingen in een volgorde die soms anders 11 gedocumenteerd was. De nieuwe server staat een meer vrije implementatie toe van het protocol. Zo zijn kan de nieuwe 12 server ook commando's begrijpen als er geen ""-quotes om een argument heen staan. 13 14 De nieuwe server is dus volledig backwards compatible met de stricte versie van dit protocol. 15 16 17 --------------------------------------------- 18 Commando's in detail 19 20 C = Client 21 S = Server 22 23 Notes bij server antwoorden: 24 Items tussen vierkante haken ('[' en ']') geven een lijst weer. 25 Items tussen accolades ('{' en '}') geven een map weer. Zoals bij alle maps, is de volgorde niet bepaald. 26 27 Notes bij client commando's: 28 Alle commando's zijn niet hoofdlettergevoelig. 29 Alle argumenten zijn niet hoofdlettergevoelig. 30 31 De server kan naast een server-berichten sturen ook de connectie verbreken. 32 33 34 Niet ondersteunde commando: 35 C: <niet ondersteunde commando> | <commando> <verkeerd(e) argument(en)> 36 S: ERR <reden> 37 ->Geen gevolg. 38 39 Inloggen: 40 C: login <speler> 41 S: OK | ERR <reden> 42 ->Nu ingelogd met spelersnaam lowercase(<speler>). Een naam moet lowercase uniek zijn. 43 Als deze spelersnaam al bekend was, maar bijvoorbeeld vroegtijdig weg is gegaan bij een toernooi, dan wordt je weer opnieuw in het toernooi gezet. 44 45 Uitloggen/Verbinding verbreken: 46 C: logout | exit | quit | disconnect | bye 47 S: - 48 ->Verbinding is verbroken. De speler blijft in het toernooi en kan weer meespelen als hij met de oude spelersnaam opnieuw inlogt. 49 50 Lijst opvragen met ondersteunde spellen: 51 C: get gamelist 52 S: OK 53 S: SVR GAMELIST ["<speltype>", ...] 54 ->Lijst met spellen ontvangen. 55 56 Lijst opvragen met verbonden spelers: 57 C: get playerlist 58 S: OK 59 S: SVR PLAYERLIST ["<speler>", ...] 60 ->Lijst met spelers ontvangen. 61 62 Inschrijven voor de spelzoeker om (voor de lol) een potje met iemand te spelen. 63 C: subscribe <speltype> 64 S: OK 65 ->Ingeschreven voor speltype <speltype>. Zodra nog een speler zich heeft ingeschreven start een match hiermee. 66 67 Match aangeboden krijgen, bericht naar beide spelers: 68 S: SVR GAME MATCH {PLAYERTOMOVE: "<naam speler1>", GAMTYPE: "<speltype>", OPPONENT: "<naam tegenstander>"} 69 ->Nu bezig met een match, de inschrijving voor een speltype is vervallen. 70 71 De beurt toegewezen krijgen tijdens match: 72 S: SVR GAME YOURTURN {TURNMESSAGE: "<bericht voor deze beurt>"} 73 ->Nu mogelijkheid een zet te doen. 74 75 Een zet doen na het toegewezen krijgen van een beurt: 76 C: move <zet> 77 S: OK 78 ->De zet is geaccepteerd door de server, gevolg voor spel zal volgen. 79 NB: <zet> is een integer van 0 t/m 8 (Tic Tac Toe) resp. 0 t/m 63 (Othello). 80 De nummering van de vakjes op het bord is rij-gewijs, van linksboven naar rechtsonder. 81 82 Resultaat van een zet ontvangen, bericht naar beide spelers: 83 S: SVR GAME MOVE {PLAYER: "<speler>", DETAILS: "<reactie spel op zet>", MOVE: "<zet>"} 84 ->Er is een zet gedaan, dit bericht geeft aan wie deze gezet heeft, wat de reactie van het spel erop is 85 86 Resultaat van een match ontvangen, bericht naar beide spelers: 87 S: SVR GAME <speler resultaat> {PLAYERONESCORE: "<score speler1>", PLAYERTWOSCORE: "<score speler2>", COMMENT: "<commentaar op resultaat>"} 88 ->De match is afgelopen, <speler resultaat> kan de waarde 'WIN', 'LOSS' of 'DRAW' bevatten. 89 <score speler1> kan arbitrair zijn als 90 91 Een match opgeven: 92 C: forfeit 93 S: OK 94 ->De speler heeft het spel opgegeven, de server zal het resultaat van de match doorgeven. 95 96 Resultaat van een match die opgegeven is door een speler, bericht naar beide spelers: 97 S: SVR GAME <speler resultaat> {PLAYERONESCORE: "<score speler1>", PLAYERTWOSCORE: "<score speler2>", COMMENT: "Player forfeited match"} 98 ->De match is afgelopen, <speler> heeft de match opgegeven. 99 100 Resultaat van een match, speler heeft de verbinding verbroken: 101 S: SVR GAME <speler resultaat> {PLAYERONESCORE: "<score speler1>", PLAYERTWOSCORE: "<score speler2>", COMMENT: "Client disconnected"} 102 ->De match is afgelopen, <speler> heeft de verbinding verbroken. 103 104 Een speler uitdagen voor een spel: 105 C: challenge "<speler>" "<speltype>" | challenge <speler> <speltype> 106 S: OK 107 ->De speler is nu uitgedaagd voor een spel. Eerder gemaakte uitdagingen zijn komen te vervallen. Gebruik quotes als er een spatie in een naam zit 108 109 Een uitdaging ontvangen: 110 S: SVR GAME CHALLENGE {CHALLENGER: "Sjors", GAMETYPE: "Guess Game", CHALLENGENUMBER: "1"} 111 ->Nu mogelijkheid de uitdaging te accepteren. 112 113 Resultaat van een uitdaging die is komen te vervallen: 114 S: SVR GAME CHALLENGE CANCELLED {CHALLENGENUMBER: "<uitdaging nummer>"} 115 ->De uitdaging is vervallen. Mogelijke oorzaken: speler heeft een andere uitdaging gestart, speler is een match begonnen, speler heeft de verbinding verbroken. 116 117 Een uitdaging accepteren: 118 C: challenge accept <uitdaging nummer> 119 S: OK 120 ->De uitdaging is geaccepteerd. De match wordt gestart, bericht volgt. 121 122 Chatten, alleen toegestaan als chat ingeschakeld is door de admin: 123 C: message <bericht zonder spaties> | message "<bericht met spaties>" 124 S: OK | ERR <reden> 125 126 Help opvragen: 127 C: help 128 S: OK 129 ->De client heeft nu help informatie opgevraagd, de server zal antwoorden met help informatie. 130 131 Help opvragen van een commando: 132 C: help <commando> 133 S: OK 134 ->De client heeft nu help informatie opgevraagd voor een commando, de server zal antwoorden met help informatie. 135 136 Help informatie ontvangen: 137 S: SVR HELP <help informatie> 138 ->Help informatie is ontvangen, kan meerdere achtereenvolgende responses bevatten. 139 140 141 --------------------------------------------- 142 Overzicht van server-berichten: 143 144 OK Commando geaccepteerd 145 ERR Commando afgewezen 146 SVR [ HELP | GAME [MATCH | YOURTURN | MOVE | CHALLENGE | [WIN | LOSS | DRAW]]] 147 Bericht van server 148 HELP Bericht met help informatie 149 GAME Bericht met betrekking op een spel/match 150 MATCH Toewijzing van een match 151 YOURTURN Toewijzing van de beurt tijdens de match 152 MOVE Een zet gedaan tijdens de match 153 CHALLENGE Bericht met betrekking op een uitdaging 154 WIN Ontvanger heeft spel gewonnen 155 LOSS Ontvanger heeft spel verloren 156 DRAW Match is geeindigd in gelijk spel 157 158 --------------------------------------------- 159 Overzicht van client-commando's: 160 161 login Aanmelden als speler 162 logout | exit | quit | disconnect | bye 163 Uitloggen en verbinding verbreken 164 get <gamelist | playerlist> 165 Opvragen van gegevens 166 gamelist Opvragen van de lijst met ondersteunde speltypes 167 playerlist Opvragen van de lijst met aangemelde spelers 168 subscribe Inschrijven voor een speltype 169 move Een zet doen tijdens een match 170 challenge [accept] Uitdagingen behandelen 171 accept Uitdaging accepteren 172 forfeit De huidige match opgeven 173 message Stuur een berichtje 174 help [commando] Help weergeven 175 176 177 178 179 180 181 182 183 Enkele tips/tricks van de schrijvers van deze server en voormalig winnaars van het toernooi in 2019 184 --------------------------------------------- 185 186 1: Neem eens een kijkje op de wiki pagina van othello en reversi. Er zijn 4 manieren waardoor de server zal concluderen dat je hebt gewonnen. 187 188 2: Hardcode het copyright bericht niet in je client. 189 190 3: Veel server instellingen kunnen worden veranderd. Verwacht deze aanpasingen dan ook. Sommige oude clients gaan de mist in als de server de client bijvoorbeeld maar 5 seconde zou geven om te reageren. 191 192 4: Daag eens een klasgenoot uit voor een potje voordat het toernooit begint. 193 194 5: Sommige spellen hebben bordposities waarbij je beurt gepasseerd moet worden, maar de server heeft geen pass commando. 195 196 6: Wees een beetje lief tegen de server, niet spammen enzo. 197 198 7: Oude clients hadden soms popups die nare gevolgen met zich mee brachten. 199 200 8: Iedereen die met de server is verbonden wordt "waarschijnlijk" tijdens het starten van een toernooi in het toernooi gezet. Er is dus niet een commando om deel te nemen aan het toernooi. 201 202 9: Test Test Test 203 204 10: De persoon die dit heeft getyped heeft dit project ook moeten doen maar dan zonder deze tips en heeft gewonnen dus doe er je voordeel mee (alvast sorry voor de spelfouten in het geval je die hebt gevonden).