Client-Server Kommunikation Hey, danke für den Fisch

Ähnliche Dokumente
Client-Server Kommunikation Twixt

XML-Schnittstellendokumentation

Client-Server Kommunikation Manhattan

Software Challenge XML- Dokumentation Hase und Igel. Sören Domrös

Software Challenge XML- Dokumentation Hase und Igel. Sören Domrös

Netzwerkprogrammierung in Java Protokollspezifikation Vier Gewinnt

Benutzerhandbuch. Neukirchen

qfix ASCII-Protokoll

Applikationsschrift 5043: Daten in einer Datei speichern

Handbuch. DSV Server

FOPT 5: Eigenständige Client-Server-Anwendungen (Programmierung verteilter Anwendungen in Java 1)

Client/Server-Systeme

Tutorial Hase und Igel Software Challenge Simon Döring

Spielanleitung Manhattan

Eine Untersuchung der Funktionen des Apache Wicket Webframeworks

Zoo 5. Robert McNeel & Associates Seattle Barcelona Miami Seoul Taipei Tokyo

Server-Eye. Stand

Systembeschreibung. Masterplan Kommunikationsinterface. ASEKO GmbH. Version 1.0 Status: Final

2. WWW-Protokolle und -Formate

Monitoringsystem TAPGUARD 240

AK-Automatisierungs und Kommunikationstechnik TI Technische Informatik. NWT Netzwerktechnik

Dokumentation der REST- Schnittstelle des Funk- Sensorsystem GesySense. Gesytec GmbH Pascalstr. 6 D Aachen

Projektarbeit Java. 4-Gewinnt. Berner Fachhochschule. 2004, Labor für Technische Informatik

Von Keerthikan T. & Siyar Kolusari

Projekt Node-Red. Mini HOWTO OPC UA Node

Socket-Programmierung (3)

IUG DRESDEN ERSTELLUNG VON ROBUSTEN NATURAL SERVICES Software AG. All rights reserved. For internal use only

Betatest Cluedo. Sebastian Bschorer. 3. Juli 2015

Installieren und Verwenden des Document Distributor 1

Konfiguration Agenda Anywhere

ICMP Protokoll & Anwendung Einige Risiken von ICMP erkennen und verstehen! FRITZ Gerald

Ludwig-Maximilians-Universität München Prof. Dr. D. Kranzlmüller Dr. N. gentschen Felde

Lösungsansätze bei Themen zum Smartfinder / dem Sage Solr Dienst

PSGEthernet (ASCII) Protokoll

SUN-SAR Softwarepreis 2008

ATM LAN Emulation. Prof. Dr. W. Riggert

Ludwig-Maximilians-Universität München Prof. Dr. D. Kranzlmüller Dr. N. gentschen Felde

FileMaker Go 13 ohne Connects

SIMP 1.01 Protokollspezifikation (Mindestanforderung)

Serielle Kommunikation - Kodierung

Client-Server mit Socket und API von Berkeley

Kommunikation Mitsubishi via System Port

Verteilte Systeme - Java Networking (Sockets) -

FAQ 02/2017. Offene Benutzerkommunikation. TSEND_C und TRCV_C SIMATIC S CPU.

Kommunikationsprotokoll für monitor Version 2.0.0

Basler Components. Unicast- & Multicast-Verbindungen mit einer Basler IP-Kamera APPLICATION NOTES

JAVA Projekt Mensch ärgere dich nicht

Dokumentation Catan-Protokoll Protokoll Version 0.2

SMS-API. Sloono Schnittstellenbeschreibung. Version 1.2 Stand

Einrichten der C.A.T.S. Netzwerk-Lizenzverwaltung

Swipos über Internet. neue Kommunikationsmöglichkeiten von swipos

IMAP und POP. Internet Protokolle WS 12/13 Niklas Teich Seite 1

Grundlagen der Web-Entwicklung INF3172

ObjectBridge Java Edition

Anleitung zu Wikispaces

Bedienungsanleitung DD 55 IS. Displaydecoder mit InterBus-S

Software-Challenge Sixpack Spielregeln. 24. Juni 2013 PACK SIX

MODBUS-TCP mit den Anweisungen MB_CLIENT und MB_SERVER

Es gibt immer einen Schlüssel und einen zugehörigen Wert,

Das Internet-Protocol. Aufteilung von Octets. IP-Adressformat. Class-A Netzwerke. Konventionen für Hostadressen

Software-Projekt: Mensch ärgere Dich nicht. Dokumentation Softwareprojekt: Mensch ärgere Dich nicht

Konfiguration Agenda Anywhere

Verteilte Systeme Übung T5

11. Die PC-Schnittstelle

Testtechniken-Praktikum Aufgabe 8

Internet for Guests. Interfaces Deutsch. Interfaces Seite 1/14

Nutzung von REST Clients für Allyouneed Marktplatz

Norm 410 Security Token Service

HTTP. Arthur Zaczek. Aug 2015

Wiederholung: Beginn

Protokollbeschreibung Modbus TCP für EMU TCP/IP Modul

Heinz Nixdorf Institut Fachgruppe Softwaretechnik Zukunftsmeile Paderborn. Feature-Liste. im Rahmen des Softwaretechnikpraktikums 2015

Informatik B. Vorlesung 16 Netzwerkprogrammierung. Dr. Ralf Kunze

Dokumentation des Projektes Tic Tac Toe

SMPP Zugang. Beschreibung. DS-Beschreibung SMPP-Zugang-2017.docx Version 1.0 Änderungsdatum

Browser mit SSL und Java, welcher auf praktisch jedem Rechner ebenso wie auf vielen mobilen Geräten bereits vorhanden ist

Rechnernetze und verteilte Systeme Programmieraufgabe

VMware vrealize Log Insight- Entwicklerhandbuch

Erstellen einer in OWA (Outlook Web App)

Software-Challenge 2017

Hexial (SUN Softwarepreis 2007)

Unified-E Standard WebHttp Adapter

Modifizierte Spielregeln Hase und Igel Software Challenge Sören Domrös

Verwenden der Option Laufzettel

Mobile Security Configurator

ARCHITEKTUR VON INFORMATIONSSYSTEMEN

Geräte Devices. Einleitung

Beschreibung RS232-Protokoll für POWER-TRAP Fotovoltaik-Wechselrichter (ab Protokollversion ENS1 = 5 und ENS2 = 6)

PROJEKTIEREN DER HW UND DER VERBINDUNGEN...

Konfiguration der SMTP-Verbindung... 5 Einstellungen speichern / laden... 6 Versenden von Paketen... 6

Simple serial time and HTTP client API Version 00.75

RARP, BOOTP, DHCP Wie ermittelt ein Client seine IP-Adresse?

Webservices. 1 Einführung 2 Verwendete Standards 3 Web Services mit Java 4 Zusammenfassung. Hauptseminar Internet Dienste

Benutzerhandbuch. Neukirchen

Handbuch Notruf. Notrufe über Voice over IP: Grundlagen und Praxis. Karl Heinz Wolf nic.at GmbH. Ausschnitt aus dem

Industriefunkuhren. Technische Beschreibung. 6875LAN-7270 GPS Hutschienen TimeServer für NTP / SINEC H1

10: Serial Communication Interface (SCI)

Bedienungsanleitung für den SecureCourier

Inhaltsverzeichnis. Firmware Updater für LS-2000/COOLSCAN III. Gebrauchsanweisung. 1. Einleitung. 2. Installation des Updates

Transkript:

Client-Server Kommunikation Hey, danke für den Fisch Software-Challenge Germany 2015 Stand 29. August 2014 Inhaltsverzeichnis 1. Einleitung 1 1.1. Beispiel-Definition.............................. 2 I. Client Server 3 2. Spiel betreten 3 2.1. Ohne Reservierung.............................. 3 2.2. Mit Reservierungscode............................ 3 3. Züge senden 3 3.1. Der Move................................... 3 3.2. Setzzug.................................... 3 3.3. Laufzug.................................... 4 3.4. Aussetzzug................................... 4 3.5. Debughints.................................. 4 II. Server Client 5 4. Raum beigetreten 5 5. Willkommensnachricht 5 6. Spielstatus 5 6.1. memento.................................... 5

6.2. Status..................................... 6 6.3. Spieler..................................... 6 6.4. Spielbrett................................... 6 6.5. Spielfeld.................................... 7 6.6. Pinguin.................................... 7 6.7. Letzter Zug.................................. 7 7. Zug-Anforderung 7 8. Fehler 8 9. Spiel pausiert 8 10.Spiel verlassen 8 11.Spielergebnis 8 III. Überblick 10

1. Einleitung Zum Inhalt Wie in den letzten Jahren wird zur Client-Server Kommunikation ein XML-Protokoll genutzt 1. In diesem Dokument wird die Kommunikationsschnittstelle definiert, sodass ein komplett eigener Client geschrieben werden kann. Es wird hier nicht die vollständige Kommunikation dokumentiert bzw. definiert, dennoch alles, womit ein Client umgehen können muss, um spielfähig zu sein. An wen richtet sich dieses Dokument? Die Kommunikation mit dem Spielserver ist für diejenigen, die aufbauend auf dem Simpleclient programmieren, unwichtig. Dort steht bereits ein funktionierender Client bereit und es muss nur die Spiellogik entworfen werden. Nur wer einen komplett eigenen Client entwerfen will, beispielsweise um die Programmiersprache frei wählen zu können, benötigt die Definitionen. Hinweise Falls Sie beabsichtigen sollten, diese Kommunikationsschnittstelle zu realisieren, sei darauf hingewiesen, dass es im Verlauf des Wettbewerbes möglich ist, dass weitere, hier noch nicht aufgeführte Elemente zur Kommunikationsschnittstelle hinzugefügt werden. Um auch bei solchen Änderungen sicher zu sein, dass ihr Client fehlerfrei mit dem Server kommunizieren kann, empfehlen wir Ihnen, beim Auslesen des XML jegliche Daten zu verwerfen, die hier nicht weiter definiert sind. Die vom Institut bereitgestellten Programme (Server, Simpleclient) nutzen eine Bibliothek um Java-Objekte direkt in XML zu konvertieren und umgekehrt. Dabei werden XML-Nachrichten nicht mit einem newline abgeschlossen. Wie das Dokument zu lesen ist Es finden sich für einzelne Arten von Nachrichten kurze Definitionen. Dabei ist ein allgemeiner XML-Code gegeben, bei dem Attributwerte durch Variablen ersetzt sind, die über dem Code kurz erläutert werden. Eingebettete XML-Elemente werden hier allgemein als {TAGNAME} geschrieben, wenn an der Stelle eine beliebige Anzahl von TAGNAME-Tags eingebettet sein kann und als [TAGNAME] 1 siehe auch: SC Wiki: Die Schnittstelle zum Server 1

, wenn an der Stelle ein TAGNAME-Tag optional stehen kann. 1.1. Beispiel-Definition Die Definitionen von a- und b-tags unten lassen unter anderem folgende a-tags zu: - <a name="sinnvoll"> <\a> - <a name="sinnvoll"> <b anzahl="2"/> <\a> - <a name="hans"> <b anzahl="2"/> <b anzahl="2"/> <b anzahl="2"/> </a> Definition b <b anzahl="2"> Definition a N Ein beliebiger Name b ein b-tag wie in obiger Definition <a name="n" > {b} <\a> 2

Teil I. Client Server 2. Spiel betreten 2.1. Ohne Reservierung Betritt ein beliebiges offenes Spiel: <join gametype="swc_2015_hey_danke_fuer_den_fisch"/> 2.2. Mit Reservierungscode Ist ein Reservierungscode gegeben, so kann man den durch den Code gegebenen Platz betreten. RC Reservierungscode <joinprepared reservationcode="rc"/> 3. Züge senden 3.1. Der Move Der Move ist der allgemeine Zug, der in verschiedenen Varianten gesendet werden kann. RID ID des Raumes ZUG je nach Art des Zuges Informationen über diesen. (siehe Abschnitt 3.2, 3.3 und 3.4) <room roomid="rid"> ZUG 3.2. Setzzug X die x-koordinate des Feldes Y die y-koordinate des Feldes <data class="setmove" setx="x" sety="y"/> 3

3.3. Laufzug FX die x-koordinate des Startfeldes FY die y-koordinate des Startfeldes TX die x-koordinate des Zielfeldes TY die y-koordinate des Zielfeldes <data class="runmove" fromx="fx" fromy="fy" tox="tx" toy="ty"/> 3.4. Aussetzzug <data class="nullmove"/> 3.5. Debughints Zügen können Debug-Informationen beigefügt werden: S Informationen zum Zug als String <hint content="s"/> Damit sieht beispielsweise ein Laufzug so aus: <room roomid="rid"> <data class="runmove" fromx="3" fromy="7" tox="3" toy="6"> <hint content="s"/> <hint content="noch ein Hint"/> </data> 4

Teil II. Server Client RID ID des Raumes, in dem das Spiel stattfindet 4. Raum beigetreten <joined roomid="rid"/> 5. Willkommensnachricht Der Spieler erhält zu Spielbeginn eine Willkommensnachricht, die ihm seine Farbe mitteilt. C Spielerfarbe (red/blue) <room roomid="rid"> <data class="welcomemessage" color="c"/> 6. Spielstatus Es folgt die Beschreibung des Spielstatus, der vor jeder Zugaufforderung an die Clients gesendet wird. Das Spielstatus-Tag ist dabei noch in einem data-tag der Klasse memento gewrappt: 6.1. memento status wie in 6.2 definiert <room roomid="rid"> <data class="memento"> status </data> 5

6.2. Status Z aktuelle Zugzahl S Spieler, der das Spiel gestartet hat (RED/BLUE) C Spieler, der an der Reihe ist (RED/BLUE) M Aktueller Zugtyp (SET/RUN) red, blue wie in 6.3 definiert board Das Spielbrett, wie in 6.4 definiert lastmove Letzter getätigter Zug (nicht in der ersten Runde), wie in 6.7 definiert condition Spielergebnis, wie in 11 definiert; nur zum Spielende <state class="state" turn="z" startplayer="s" currentplayer="c" currentmovetype="m"> red blue [board] [lastmove] [condition] </state> 6.3. Spieler C Farbe (RED/BLUE) N Anzeigename P Punktekonto F Eisschollenkonto <C displayname="n" color="c" points="p" fields="f"/> 6.4. Spielbrett FIELD Ein Spielfeld wie in 6.5 definiert. <board> <fields> {FIELD} 6

{FIELD}... (8 Stück davon) </fields> </board> 6.5. Spielfeld F Anzahl der Fische auf dem Feld Penguin Pinguin, wie in 6.6 definiert. <field fish="f"> [Penguin] </field> 6.6. Pinguin O Besitzer RED/BLUE <penguin owner="o"/> 6.7. Letzter Zug Der letzte Zug ist ein Move (siehe hierzu??). T Zugtyp ZUG Informationen über den Zug. (siehe 3.2, 3.3 und 3.4) <lastmove class="t" ZUG/> 7. Zug-Anforderung Eine simple Nachricht fordert zum Zug auf: <room roomid="rid"> <data class="sc.framework.plugins.protocol.moverequest"/> 7

8. Fehler Ein spielfähiger Client muss nicht mit Fehlern umgehen können. Fehlerhafte Züge beispielsweise resultieren in einem vorzeitigen Ende des Spieles, das im nächsten gesendeten Gamestate erkannt werden kann (siehe 11). MSG Fehlermeldung <room roomid="rid"> <error message="msg"> <originalrequest> Request, der den Fehler verursacht hat </originalrequest> </error> 9. Spiel pausiert Ein spielfähiger Client muss Pausierungsnachrichten nicht beachten, da er nur auf Aufforderungen (Zug-Aufforderung siehe 7) des Servers handelt. N Spielername C Spielerfarbe P Punktekonto F Eisschollenkonto <room roomid="rid"> <data class="paused"> <nextplayer class="player" displayname="n" color="c" points="p" fields="f"/> </data> 10. Spiel verlassen <left roomid="rid"/> 11. Spielergebnis Zum Spielende enthält der Spielstatus eine Condition, der das Spielergebnis entnommen werden kann: W Gewinner (RED/BLUE), bei Unentschieden wird kein winner mitgeschickt. 8

R Text, der den Grund für das Spielende erklärt <condition winner="w" reason="r"/> 9

Teil III. Überblick Hier nochmal ein kurzer Überblick, der etwas genauer zeigt, wie die Kommunikation ablaufen kann. 1. Ein Spielserver startet ein Spiel und wartet auf den Client (die Clients). 2. Der Client stellt eine TCP Verbindung zum Spielserver her (er kennt dessen IP- Adresse und Port) 3. Die Verbindung ist aufgebaut und der Client sendet <protocol> <join gametype="swc_2015_hey_danke_fuer_den_fisch"/> 4. Der Server sendet <protocol> <joined roomid="65d3d704-87d9-42eb-8995-51c3e6324513"/> 5. der Client merkt sich die roomid. 6. der Server startet das Spiel und sendet <room roomid="65d3d704-87d9-42eb-8995-51c3e6324513"> <data class="welcomemessage" color="blue"/> 7. der Client merkt sich seine Spielerfarbe. 8. der Server sendet das Ausgangsspielfeld: <room roomid="65d3d704-87d9-42eb-8995-51c3e6324513"> <data class="memento"> <state class="state" turn="0" startplayer="red" currentplayer="red" currentm <red displayname="spieler 1" color="red" points="0" fields="0"/> <blue displayname="spieler 2" color="blue" points="0" fields="0"/> <board> <fields> 10

11

<field fish="0"/> <field fish="0"/> <field fish="0"/> <field fish="0"/> </fields> </board> </state> </data> 9. da der andere Spieler anfängt folgt noch eine memento-nachricht vom Server, die den Spielstatus nach dem ersten Zug von Spieler 1 beinhaltet. 10. es folgt die erste Zug-Aufforderung vom Server: 12

<room roomid="65d3d704-87d9-42eb-8995-51c3e6324513"> <data class="sc.framework.plugins.protocol.moverequest"/> 11. Der Client antwortet mit einem Zug: <room roomid="65d3d704-87d9-42eb-8995-51c3e6324513"> <data class="setmove" setx="0" sety="2"/> 12. so geht es weiter... 13. die letzte Nachricht enthält ein </protocol> Daraufhin wird die Verbindung geschlossen 13