Home

Gorn On Random Nodes

image

Contents

1. Nachrichten Referenz Gameserver C gt GS game add Pid Cookie Username Gamename Missing Der Client fordert den Gameserver auf das Spiel Pid vom Typ Gamename gestartet von Username mit Missing fehlenden Spielern der Liste von Spielen hinzuzufiigen C gt GS game remove Pid Cookie Username Der Client fordert den Gameserver auf das Spiel Pid aus seiner Spieleliste zu entfernen C gt GS game change Pid Cookie Username Missing Der Client meldet dem Gameserver eine Anderung der Anzahl fehlender Spieler f r das Spiel Pid C gt GS game start Pid Cookie Username Der Client meldet dem Gameserver dass das Spiel Pid gestartet wurde Der Gameserver entfernt es daraufhin aus der Liste wartender Spiele C gt GS game list Pid Cookie Username Gamename Der Client bittet den Gameserver um eine Liste wartender Spiele GS gt C game list Games Der Gameserver schickt dem game Modul eine Liste von verfiigbaren Spielen Die Listenele mente sind Tupel mit folgendem Aufbau Spieltyp Username ServerPid Status waiting oder running Missing 3 6 2 Das game Modul Das game Modul ist ein generisches Modul um die Synchronisation zwischen einem Spielserver und mehreren Clients zu erm glichen Es stellt die gesamte Funktionalit t zum Aushandeln eines Mehrspielerspiels zur Verf gung Spiele die das game Modul benutzen m ssen die folgenden zwei Funktionen bereitstellen 17 gameconfi
2. Feld Typ Beschreibung username Atom Username des Benutzers fullname String Voller Name des Benutzers privileged Atom true wenn der Benutzer privilegiert ist sonst false passwd String Passwort Die Mailapplikation benutzt das DB Servermodul um Emailnachrichten aufzubewahren Dazu wird eine Tabelle von Nachrichten mailspool verwaltet die die folgenden Felder enth lt Feld Typ Beschreibung msgid Atom Eindeutige Kennzeichnung einer Nachricht user Atom Empf nger als Benutzername from Atom Absender als Benutzername destination Atom Alle Empf nger time localtime Tupel Zeit des Absendens state String Zustand N neu D gel scht gelesen subject String Betreffzeile body String Eigentliche Nachricht Der aktuelle Zustand eingeloggter Benutzer wird in einer fl chtigen Mnesia Tabelle user_state gehalten um diese Informationen einfacher ERLANG global verf gbar zu machen Diese Tabelle wird bei jedem Starten von GORN angelegt und beim Ein Ausloggen aktualisiert Feld Typ Beschreibung username Atom Benutzername cookie Binary Cookie des Benutzers state Atom Aktueller Zustand online oder away 10 3 Applikationen 3 1 Die Gornbar Der Funktionsumfang der Gornbar ist sehr gering um das Modul das auf den Clientrechnern installiert werden muss klein zu halten Die Benutzung der Gornbar wird in Anhang A erl utert deshalb soll hier nur auf die
3. description Liefert eine textuelle Beschreibung der Applikation Die Beschreibung muss als Liste von Zeichenketten zur ckgegeben werden wobei jedes Listenelement auf einer Zeile angezeigt wird Dieser Text k nnte von einer Hilfefunktion angezeigt werden wird aber im Moment ignoriert Die Applikationen werden vom Applicationmanager auf der Clientnode gestartet Die folgenden Parameter werden dabei den Clientstatics bzw Applikationen als Liste bergeben Gornbar Prozess Identifier PID der Gornbar von der die Applikation gestartet wurde Cookie Der Cookie des Benutzers der die Applikation gestartet hat Username Der Benutzername des Benutzers der die Applikation gestartet hat Serverlist Eine Liste von Zwei Tupeln wobei jedes Tupel aus dem Namen eines Servers und dessen PID besteht Neben den Applikationsservern beinhaltet die Liste auch die PIDs des Application und des Usermanagers unter den Namen appman bzw userman Die Interfaces f r Clientstatic und Servermodule sind wesentlich einfacher gehalten Statics exportieren die Funktion gornstatic die das Atom linklist akzeptiert Zum Starten des Cli entstatics wird die selbe Funktion mit einer Parameterliste aufgerufen Server exportieren nur die Funktion gornserv die ohne Parameter auskommt Die Clientmodule k nnen Kontakt zu ihren Servern aufnehmen und deren Dienste nutzen Dazu entnehmen sie die PIDs aus der Liste der Server die sie beim Start bergeben bekommen haben
4. o A E serverside S gt gt YN clientstatic CS jo o E 2 D client C Abbildung 2 Bestandteile einer Applikation immer die aktuellste Version gestartet wird 2 3 GEF Das GORN Executable Format Das GORN Executable Format beschreibt ein bestimmtes Interface das Serversides Clients und Clientstatics einer Applikation implementieren m ssen um vom GORN System akzeptiert zu wer den Das Interface umfasst die Signaturen der zu exportierenden Funktionen sowie das Protokoll zum Laden und Starten der Komponenten Die Signaturen werden vom GEF Loader gepr ft die korrekte Implementierung des Protokolls allerdings nicht Da die Module nur auf dem Server instal liert werden stellt dies bei sachgem er Installation kein Sicherheitsrisiko dar Die Modulnamen werden dem GEF als Atome bergeben und m ssen eindeutig sein Eine Applikation muss eine Funktion gornapp mit der Arit t eins exportieren und folgende Atome erkennen name Liefert eine Zeichenkette mit dem Namen der Applikation Dieser Name wird in den Kn pfen der Gornbar angezeigt version Liefert ein Drei Tupel mit der Version der Applikation Diese Information k nnte zum Abgleich der Versionen von Server und Clientmodulen benutzt werden wird im Moment aber ignoriert linklist Liefert eine Liste von Modulen die von dieser Applikation ben tigt werden Diese werden beim Starten der Applikation mit auf die Clientnode bertragen
5. 3 Oo E 2 client C Abbildung 1 Systemarchitektur stellen applikationsspezifische Server den Clientapplikationen zentrale Dienste zur Verf gung zum Beispiel die Verwaltung von Email Nachrichten Auf der Clientseite laufen verschiedene Arten von Prozessen Der Wichtigste davon ist die Gornbar die als einziges Modul auf den Clientrechnern installiert werden muss Diese hat aller dings nur eine sehr eingeschr nkte Funktionalit t Im Wesentlichen kann sie das Einloggen auf dem Server eine Liste aller Benutzer und ein Nachrichtenfenster verwalten Die Applikationen selbst die die eigentliche Funktionalit t zur Verf gung stellen werden nicht auf der Clientseite installiert sie existieren nur auf dem Server und werden bei Bedarf in den ERLANG Prozess auf dem Clientrechner geladen Dieses dynamische Laden macht die Installation und Konfiguration des Systems sehr einfach da auf den Clients lediglich die Gornbar installiert werden muss Die Ap plikationen selbst m ssen nur auf dem Server eingespielt werden und stehen den Benutzern beim n chsten Einloggen zur Verf gung Wie das dynamische Laden von Applikationen implementiert wurde ist in Abschnitt 2 3 beschrieben Die Applikationen k nnen aus bis zu drei unabh ngigen Teilen bestehen siehe Abbildung 2 Die eigentliche Clientapplikation implementiert die grafische Benutzeroberfl che und die komplette Logik zur Benutzerinteraktion Sie wird explizit vom
6. ft werden und zeigt sich erst zur Laufzeit in teilweise recht undeutlichen badmatch Fehlern Im GORN System kommt noch erschwerend hinzu dass sehr h ufig Codeteile auf anderen Knoten gestartet werden die R ckgabewerte der aufgerufenen Funktionen aber nicht von Interes se sind Deswegen werden Fehlermeldungen die in R ckgabewerten verschl sselt sind verschluckt und abst rzende Clientapplikationen m ssen durch print debugging repariert werden Allerdings hat erst die M glichkeit des dynamischen Nachladens von Codeteilen diesen Mechanismus m glich gemacht Wie GORN gezeigt hat ist mit ERLANG echtes Application Service Providing m glich Nutzer haben nur absolut notwendige Codeteile lokal vorr tig w hrend die eigentliche Applikati onslogik zentral verwaltet werden kann und erst bei Bedarf auf die Clients bertragen wird Die Berechnungen selber finden dann auf dem Client statt so dass die Rechenlast beim Client verbleibt Obwohl die Kommunikation zwischen Programmteilen in ERLANG sehr einfach ist ergeben sich schnell wieder Standardprobleme die nicht gel st werden Hier w re eine Bibliothek oder zumindest eine Sammlung von Design Pattern sehr hilfreich Das erste Standardproblem ist die Identifikation des Absenders einer Nachricht Diese ist nat rlich nicht immer n tig man denke an Events die aus dem Grafiksystem kommen In einem System mit verschiedenen Usern ist es jedoch schwierig Sicherheit herzustellen In
7. ndert sich Newstate ist eins der Atome away back oder logout Die Message wurde vom Benutzer eingegeben und kann in Applikationen verwendet werden C gt UM un setuser Cookie Username Puser Modifizieren von Usereigenschaften Darf nur von einem privilegierten Benutzer oder von einem User auf seine eigenen Daten angewendet werden C gt UM un deluser Cookie Username UsernameDst Der Benutzer UsernameDst soll gel scht werden Dies ist nur m glich wenn der senden de Prozess von einem privilegierten Benutzer ausgef hrt wird Sollte sich ein privilegierter Benutzer selbst l schen ist der Zustand des Gesamtsystems undefiniert UM gt GB um watchdog ping Pid Einerseits wird die Gornbar mit dieser Nachricht aufgefordert eine Antwortnachricht zu schicken andererseits kann sie feststellen ob der Server noch l uft Sollte diese Nachricht zu lange ausbleiben geht die Gornbar von einer Nichterreichbarkeit des Servers aus und loggt sich aus Die Pid ist die des Usermanagers um die Beantwortung der Nachricht zu erleichtern GB gt UM um watchdog pong Pid Beantwortet die Watchdognachricht vom Usermanager Sollte diese Nachricht zu lange aus bleiben wird die Gornbar vom Usermanager f r tot erkl rt und ausgeloggt 2 4 3 Der Applicationmanager Der Applicationmanager dient der Verwaltung der Applikationen in GORN Dazu geh rt das Ver walten und Ausliefern einer Liste der verf gbaren Applikationen und das Sta
8. nger die Schlangen der Mitspie ler werden Auch die Netzwerklast nimmt dann rapide zu so dass das Spiel ber eine langsame Verbindung nicht mehr spielbar ist Die Spielerzust nde lie en sich effizienter repr sentieren indem nicht jeder Rasterpunkt sondern nur Anfangs und Endpunkt einer Strecke gespeichert w rden Dies w rde den Speicherbedarf und die Netzlast drastisch reduzieren allerdings die Kollisionser kennung erschweren 3 7 Die About Box About Boxen finden sich in vielen Applikationen Sie bieten den Programmierern eine M glichkeit ihre Namen der ffentlichkeit zu zeigen Die GORN About Box demonstriert wie sich in ERLANG Bin rdateien sehr einfach lesen trans portieren und schreiben lassen Dazu bietet der Aboutserver eine Reihe von kleinen Bildern an die die Aboutclients in unterschiedlichen Abst nden abfragen und anzeigen Nachrichten Referenz About Box C gt about image Pid Ein Client fordert ein weiteres Bild an welches zuf llig aus der Liste der verf gbaren Bilder gew hlt wird Der Server hat alle Bilder zum Start des GORN Servers bereits gelesen und muss nur noch ein Listenelement ausw hlen und an die angegebene Pid schicken S gt C about image Filename Binarydata Der Server liefert ein Bild aus Das Tupel enth lt den Dateinamen des Bildes und die eigent lichen Daten Auf dem Client werden die Daten in eine tempor re Datei geschrieben und das Grafiksystem wird angewiesen das Bil
9. und der Application Server bekannt gemacht und die zweite Stufe beginnt Sie ist in Abschnitt 2 4 2 beschrieben Nach dem Einloggen kommuniziert keiner der clientseitigen Prozesse mehr mit dem GORN Prozess Gornbar Gorn Userman gorn login Pid Username Password gorn welcome Userman Appman um login Pid Username Password um welcome Cookie Abbildung 3 Das Login Protokoll Nachrichten Referenz Gorn Prozess GB gt G gorn login Pid Username Password Benutzer Username will sich mit der Gornbar Pid und Password anmelden G GB gorn welcome PID_Usermanager PID_Appmanagert Benutzer hat sich erfolgreich authentifiziert und bekommt zur weiteren Anmeldung die PIDs der wichtigsten Serverprozesse mitgeteilt G GB gorn reject Benutzer darf sich nicht anmelden weil das Passwort nicht gestimmt hat oder der Benutzer nicht bekannt ist G gt AM gorn serverlist Servers Der GORN Prozess schickt diese Nachricht an den Applicationmanager sobald die Server module gestartet wurden Dies ist notwendig da der Applicationmanager die Liste ben tigt wenn er Clients bzw Clientstatics startet 2 4 2 Der Usermanager Der Usermanager bernimmt die zweite Stufe des Login Protokolls und ist generell f r die Ver waltung der Benutzerdaten zust ndig Clientprozesse k nnen sich beim Usermanager registrieren um ber Status nde
10. Benutzer gestartet Dieser Teil der Appli kation wird im Folgenden als Client bezeichnet Applikationen k nnen falls n tig noch einen serverseitigen Teil besitzen Dieser wird als Serverside bezeichnet Und schlie lich darf noch ei ne so genannte Clientstatic Komponente der Applikation existieren die beim Einloggen auf dem Clientrechner gestartet und erst beim Ausloggen wieder beendet wird Beispiele f r diese drei Komponenten werden in der Dokumentation der einzelnen Applikationen gegeben Die Dokumentation der einzelnen Systemkomponenten beinhaltet jeweils eine Referenz der wichtigsten GORN spezifischen Nachrichten die von der Komponente verschickt bzw empfangen werden Dabei werden folgende Abk rzungen zur Bezeichnung der Systembestandteile benutzt C ist die allgemeine Abk rzung f r Clients S bezeichnet einen Server Spezielle Server und Clients werden ihren Namen entsprechend abgek rzt UM ist der Usermanager AM der Applicationma nager und G der GORN Prozess Die Gornbar wird mit GB abgek rzt Bewertung Das Applikationsmodell ist sehr leicht erweiterbar Neue Applikationen m ssen nur im richtigen Verzeichnis verf gbar gemacht werden Negativ ist zu bewerten dass der GORN Server neu gestar tet werden muss um neue Applikationen zu finden Allerdings ist das Erneuern von existierenden Applikationen sehr einfach Ein neu bersetztes Modul wird automatisch nachgeladen so dass Applikation 0 jo
11. Bewertung Das GEF ermittelt Informationen von den Modulen die in GORN momentan nicht benutzt werden Zuk nftige Erweiterungen k nnen darauf zur ckgreifen 2 4 Die Servermodule Auf dem Server laufen nach dem Starten des Systems zun chst vier applikationsunabh ngige Server Der GORN Prozess der Usermanager der Applicationmanager und der DB Server Neben diesen vier Servern die immer gestartet werden durchsucht der Applicationmanager beim Starten ein Verzeichnis welches zu startende Serversidemodule enthalten kann Diese wer den dadurch identifiziert dass sie g ltige Beam Dateien ERLANG Bin rdateien sein m ssen die das GEF Interface f r Serversides exportieren Alle gefundenen Server werden dann gestartet Darunter sind beispielsweise der Chatserver und der Mailserver 2 4 1 Der GORN Prozess Der GORN Prozess ist der erste Prozess des GORN Systems Er registriert sich unter dem Namen gorn beim ERLANG Laufzeitsystem Die Gornbar versucht beim Einloggen des Benutzers Kontakt mit diesem Prozess aufzunehmen und leitet dadurch das Login Protokoll ein Da die Anzahl der Prozesse die den ERLANG Laufzeitsystemen bekannt sein m ssen gering gehalten werden sollte ist dieses Protokoll etwas komplizierter siehe auch Abbildung 3 Es umfasst zwei Stufen Zun chst sendet die Gornbar die eigene PID den Usernamen und das eingegebene Passwort an den GORN Prozess Wenn die Username Passwort Kombination g ltig ist wird der Gornbar der User
12. GORN wurde das Problem durch eine Art Session Cookie gel st allerdings ist es nat rlich immer mit Aufwand verbunden eine eigene L sung zu implementieren Es ist in ERLANG relativ einfach Nachrichten in Abh ngigkeit vom aktuellen Zustand zuzulassen oder zu verbieten eine Abh ngigkeit vom Absender ist aber nicht m glich Sollen nur zwei Prozesse immer wechselseitig kommunizieren ergibt sich eine Art verbindungs orientierte Kommunikation die ber der Paketorientierten des Messagepassing steht ERLANG bietet keine Hilfe an die Existenz des Kommunikationspartners zu berpr fen Als Folge daraus m ssen Ping Pong Mechanismen implementiert werden die regelm ig das Vorhandensein der Gegenstelle berpr fen Im GORN System wird das beispielsweise gemacht um das Verschwinden einer Gornbar zu erkennen welche nicht ordnungsgem beendet wurde z B durch Abschie en der ERLANG Shell Etwas umst ndlich ist das Aufsetzen der ERLANG Laufzeitumgebung Damit Knoten ber haupt kommunizieren k nnen muss die Namensaufl sung der Rechner auf allen Knoten in beide Richtungen vollst ndig und korrekt sein Dies ist in gro en und professionell administrierten Net zen unproblematisch aber bei vielen kleinen Installationen bei Privatleuten oder Verb nden von tragbaren Computern eher m hselig zu erreichen Zus tzlich hat sich gezeigt dass ERLANG Netz werkverbindungen auch automatisch zwischen Clients aufbaut die sich auf einen geme
13. Gornbar benutzt UM gt GB un shortlist Userlist Die Liste aller Benutzer wird geschickt Diese enth lt Zwei Tupel mit dem Benutzernamen und dem Zustand C gt UM un info Pid Username Ein Client fragt den ffentlichen Teil der Informationen ber einen User ab UM gt C um info Userinfo Der ffentlicher Teil der Userinformation wird an den Client geschickt Userinfo enth lt den user Record fiir den Benutzer C gt UM un pinfo Pid Cookie Username Ein Client fragt den privaten Teil der Userinformationen ab Das ist nur f r den eigenen User oder privilegierte Benutzer erlaubt Andere Anfragen generieren eine denied Message UM gt C um pinfo Username Userinfo Der Server sendet den privaten Teil der Userinformationen an den Client Userinfo enth lt den puser Record f r den Benutzer UM gt C um denied Msg Der Usermanager hat einem Client aufgrund fehlender Privilegien den Zugriff auf Benutzer daten verweigert Die Begr ndung steht in dem String Msg C gt UM um away Cookie Username Message Der User will sich away melden Der Zustand muss entsprechend angepasst werden Der Text kann in Applikationen wie dem Chat genutzt werden C gt UM um back Cookie Username Message Der User ist nicht mehr away Der Zustand ndert sich auf online Die Message kann in Applikationen verarbeitet werden UM gt C um status Newstate Username Message Der Zustand eines Users
14. Liste der Email Nachrichten sollte der besseren bersichtlichkeit halber nach dem Eingangs datum sortiert sein dies ist aber nicht implementiert Daher werden die Nachrichten in der eher zuf lligen Reihenfolge angezeigt in der sie in der Datenbank gespeichert sind Zur Verbesserung der Benutzerfreundlichkeit sollte noch eine Undelete Funktion hinzugef gt werden um die L schmarkierung zur ck zu setzen 12 3 3 Das Chatsystem ber das Chatsystem k nnen mehrere Benutzer miteinander kommunizieren Die Serverside ver waltet genau einen Chatkanal in dem alle Benutzer sprechen k nnen die die Chatapplikation gestartet haben Neben dem normalen ffentlichen Sprechen kann ein Benutzer auch im Chat agieren indem er dem Text ein me voranstellt In der Benutzerliste der Clientapplikation wer den alle Benutzer aufgelistet die momentan im Chat sind Wenn ein Benutzer seinen Status wechselt beispielweise away geht wird diese Tatsache im Chatfenster ausgegeben Wenn ein Benutzer eine Zeile Text eingegeben hat wird diese an den Server geschickt welcher sie an al le angeschlossenen Chat Clients weiterleitet Es existiert kein Clientstatic Teil im Chatsystem Abbildung 5 stellt die beteiligten Komponenten dar Chat serverside Usermanager server node join leave away back logout client node client Abbildung 5 Chat Applikation Als kleiner Bonus wird im Chatf
15. Nachrichten eingegangen werden die die Gornbar versteht Nachrichten Referenz Gornbar C gt GB gornbar selectedusers Pid Eine Applikation erfragt die Liste der momentan in der Userliste ausgew hlten User Diese Nachricht wird beispielsweise vom Talk Client geschickt um einen Talk Partner zu ermitteln GB gt C gornbar selectedusers Userlist Die Gornbar meldet die Usernamen der ausgew hlten Benutzer C gt GB log Message Message muss ein String sein der dann von der Gornbar im Logfenster ausgegeben wird Weiterhin versteht die Gornbar noch diverse Nachrichten des User und des Applicationmana gers Sie registriert sich beim Usermanager um Status nderungen der anderen Benutzer anzeigen zu k nnen Weiterhin benutzt sie den Applicationmanager um die Liste der verf gbaren Applika tionen auszulesen sowie Applikationen zu starten Bewertung Wenn ein Benutzer seinen Zustand ndert also sich beispielsweise ein oder ausloggt sieht das Protokoll die bergabe von Nachrichten vor Diese Nachrichten sind momentan fest vorgegeben Die Gornbar k nnte diese vom Benutzer erfragen Es w re auch m glich diese Nachrichten dem Benutzerprofil zuzuordnen so dass jeder Nutzer sie nur einmal eingeben muss Wenn weitere Applikationen implementiert werden muss die grafische Oberfl che der Gornbar angepasst werden Das Raster in dem die Applikationskn pfe angezeigt werden ist im Moment fest so dass nur eine begrenzte
16. Signoff Message verlassen Der Server teilt das allen angeschlossenen Teilnehmern mit S gt C chat leave Username Message Ein Benutzer verl sst den Chat Der Username wird aus der Userliste zu entfernt Die Mes sage Signoff Message des Users wird im Chatfenster ausgegeben username has left the chat message C gt chat say Cookie Username Text Der User Username spricht eine Zeile ffentlich in den Chat S gt C chat say Username Text Ein User spricht ffentlich Der einzeilige Text wird im Chatfenster ausgegeben C gt S chat act Cookie Username Text Der Benutzer Username agiert im Chat me Effekt S gt C chat act Username Text Ein User agiert im Chat Der Text wird entsprechend formatiert im Chatfenster ausgegeben me Effekt Bewertung Der Chat lie e sich durch mehrfaches Instanziieren des Chatservers so erweitern dass mehre re Chatkan le verf gbar w ren Der Client m sste so erweitert werden dass er den Server des gew nschten Chatkanals unter den Verf gbaren ausw hlt und sich bei diesem anmeldet 3 4 Das Talksystem Im Gegensatz zum Chat k nnen beim Talk nur genau zwei Benutzer miteinander kommunizieren Ein weiterer Unterschied ist dass jedem Benutzer im Talkclient ein Fenster f r seinen eingegebenen Text zur Verf gung steht und der Benutzer explizit eine Verbindung mit einem anderen Benutzer aufnehmen kann Der andere Benutzer erh lt dann e
17. der Konfiguration best tigt und das Spiel wird gestartet C gt GS tetris nextstone Pid Der Client Pid fordert den n chsten Stein an GS gt C tetris nextstone Stone Mit dieser Nachricht wird dem Client der n chste zu verwendende Stein mitgeteilt Diese Nachricht wird vom Server nach dem Empfang der obigen Nachricht erzeugt C gt GS tetris removed Pid NumLines Der Client Pid meldet dass bei ihm NumLines Zeilen entfernt wurden GS gt C tetris insert NumLines Mit dieser Nachricht wird der Client aufgefordert NumLines Zeilen von unten dem Spielfeld hinzuzuf gen Je nach Einf gemodus wird entweder sofort eingef gt oder der Wert zwi schengespeichert und das Einf gen nach dem Absetzen des n chsten Steins vorgenommen C gt GS tetris height Pid Height Der Client Pid meldet dass der h chste Stein im Spielfeld auf der H he Height ist GS gt C tetris height Pid Height Mit dieser Nachricht wird die H henanzeige f r den Client Pid aktualisiert GS gt C tetris speedup NewSpeed Mit dieser Nachricht setzt der Server eine neue Fallgschwindigkeit der Steine auf dem Client Diese wurde zentral f r alle Spieler auf dem Server berechnet C gt GS tetris dead Pid Ein Spieler meldet sich tot weil sein Spielfeld voll geworden ist oder er das Spiel vorzeitig verlassen hat GS gt C tetris dead Pid Diese Nachricht teilt allen Clients das Ausscheiden eines Spielers mit
18. erreichen die Bots bessere Ergebnisse 36 A 7 5 Tron spielen Tron ist ebenfalls ein rundenbasiertes Spiel Sobald alle Spieler durch Dr cken der Space Taste oder des Start Knopfes ihre Bereitschaft zum Rundenbeginn best tigt haben startet ein kurzer Countdown und die Runde beginnt In der Runde bewegen Sie den Kopf ihrer Schlange ber ein Raster Auf den Schnittpunkten des Rasters wendet sich die Schlange nach rechts oder links wenn Sie vorher die rechte oder linke Pfeiltaste gedr ckt haben Die Bewegungsrichtung ist dabei immer aus der Perspektive des Schlangenkopfes zu sehen Ein Spieler verliert wenn er an eine Wand oder den Schwanz einer anderen Schlange st t Gewinner der Runde ist der letzte Spieler der sich noch bewegen kann Danach beginnt eine neue Runde Auf der rechten Seite des Tronfensters befindet sich eine Highscoreliste auf der sich die Punktest nde der Mitspieler befinden Sie k nnen das Spiel jederzeit durch Bet tigen des Close Knopfes verlassen A 7 6 Tron konfigurieren Mit dem ersten Schalter kann das Spiel in den Snake Mode versetzt werden was bedeutet dass die Schlangen eine maximale L nge haben Normalerweise werden die Schlangen von Beginn an immer l nger so das sich das Spielfeld schnell mit Schlangen f llt Mit dem zweiten Schalter Show Grid kann die Sichtbarkeit des Rasters auf dem sich die Schlangen bewegen ein oder ausgeschaltet werden Wenn ein gro es Raster benutzt
19. glich einen Stein in die Wand zu schieben Die Steine von GORNtris bestehen jeweils aus vier Bl cken Es gibt sieben unterschiedliche Arten von Bl cken die ein zwei oder vier Rotationszust nde haben k nnen Die sieben unter schiedlichen Arten hei en quad long four stool el elinv eh Sie sind in Abbildung 9 dargestellt Jeder Stein hat einen Dreh und Anfasspunkt der zur Berechnung der restlichen drei Bl cke herangezogen wird Dreh und Anfasspunkt Abbildung 9 Die verschiedenen Steine in ihren unterschiedlichen Rotationszust nden Zus tzlich zu den Spielinformationen auf dem Client werden auf dem Server Informationen ber die aktuelle Spielgeschwindigkeit die Anzahl der entfernten Zeilen und die Liste der akti ven ausgeschiedenen Spieler verwaltet 19 Nachrichten Referenz GORNtris GS gt C tetris config Gameconfig ClientList Diese Nachricht wird vom Spieleserver nach dem Driicken des Start Knopfes an alle Cli ents geschickt um ihnen die Konfiguration fiir das Spiel mitzuteilen Gameconfig enth lt die Gr e des Spielfeldes die Fallgeschwindigkeit den ersten Stein und den Einf gemodus ClientList enth lt Usernamen und PIDs der Mitspieler C gt GS tetris ready Pid Hiermit best tigt ein Client den Empfang der Konfiguration und das erfolgreiche Erzeugen des Spielfeldes GS C tetris start Alle Clients haben den Empfang
20. lines to remove between speedup gibt an wieviele Zeilen insgesamt von allen Spielern abger umt werden m ssen bevor die Steine anfangen wieder etwas schneller zu fallen Der dritte Schieberegler Amount of speedup gibt an um wieviel die Steine schneller fallen sollen wenn der Spieler die obige Anzahl von Zeilen abger umt hat Eine gr ere Zahl resultiert in einer h heren Beschleunigung des Spiels Die n chsten beiden Regler geben die Gr e des Spielfeldes vor Die Voreinstellung von 10x18 entspricht dem original Gameboy M TetrisTM Schlie lich kann mit der letzten Einstellung gew hlt werden ob Zeilen jederzeit von anderen Spielern untergeschoben werden k nnen Insert at any time oder ob das nur m glich ist wenn gerade ein eigener Stein abgesetzt wurde Insert only after drop Dieses ist f r den Spieler etwas einfacher als Ersteres A 7 3 Pong spielen Pong ist ein rundenbasiertes Spiel Sobald das Spiel gestartet wurde beginnt ein f nfsek ndiger Countdown und die Runde startet Sie kontrollieren ein gr nes Paddle an der unteren Seite des abgebildeten Polygons Sie k nnen es mit den Pfeiltasten oder den Tasten der Maus nach links und rechts bewegen Der Bereich auf dem Sie das Paddle bewegen k nnen ist Ihre Homezone Aufgabe der Spieler ist es den Ball nicht aus dem Polygon entkommen zu lassen Sobald ein Spieler den Ball fallen l sst bekommt dieser Spieler einen Punktabzug und eine neue Runde be
21. ob der User privilegiert ist oder nicht Die Admin Applikation hat keine eigenen Nachrichten es werden ausschlie lich die Nachrichten des Usermanagers zur Abfrage und Modifikation der User Daten benutzt Admin o U 8 sermanager 9 E o gt jo Sh E 52 oS SH ES gt O 3 20 2 5 client Abbildung 7 Verwaltungsapplikation Bewertung Zur Zeit beschr nkt sich die Verwaltungsapplikation auf die Verwaltung der Benutzerdaten Ei ne sinnvolle Erweiterung w rde die Verwaltung der Applikationen darstellen beispielsweise die M glichkeit Programmdateien auf dem Server zu installieren 3 6 Die Spiele Die Funktionalit t die allen Spielen gemeinsam ist wurde in einen Server ausgelagert der ent sprechend den anderen Applikationsservern vom GORN Prozess auf dem Serverknoten gestartet wird Dieser Server wird in Abschnitt 3 6 1 n her beschrieben Weiterhin bestehen die Spiele aus einem spielspezifischen Serverteil der den Spielverlauf ko ordiniert und berechnet sowie aus einem Clientteil der f r die Darstellung der Spiele auf dem Bildschirm zust ndig ist Der Serverteil l uft auf dem Clientknoten des Benutzers der ein Spiel startet Die Clientteile laufen auf den Knoten der teilnehmenden Spieler Die Kommunikation zwischen Server und Clientprozessen verl uft direkt zwischen den Knoten der Spieler und dem Spielserver siehe Abbildung 8 Server und Clientteil eine
22. ohne vom Paddle reflektiert zu werden Jeder Spieler sieht die eigene Seite am unteren Spielfeldrand und kann die angezeigte Gr e des Spielfeldes frei w hlen Daher ist es n tig in jedem Client die Universumskoordinaten durch Drehen Skalieren und Verschieben dem Koordinatensystem des Anzeigecanvas anzupassen Das Drehen ist n tig damit jeder Spieler seine eigene Homezone am unteren Rand des Spielfeldes sieht Durch den Skalierungsschritt ist die Gr e des Fensters beliebig ver nderbar Die Verschiebung Translation ist n tig da das Canvas den Koordinatenursprung links oben hat und nur positive Koordinaten sichtbar sind Die Berechnung findet aber in einem normalen karthesischen Koordi natensystem statt und sichtbare Werte sind sowohl negativ als auch positiv Das Spielfeldpolygon hat Diagonalen die 1000 Meter lang sind Die Einheit ist willk rlich gew hlt erlaubt aber dem Benutzer eine gewisse Vorstellung der Geschwindigkeiten Diese Vorstellung ist beim Einstellen der Spielparameter von Vorteil Abbildung 10 Sicht jedes Spielers auf die eigene Homezone Die W nde links und rechts sind fest Die Winkel und die L nge der Homezone ndern sich mit der Anzahl der Spieler Zur Anzeige wird bei jedem Spieler das Universumskoordinatensystem auf das Koordinatensystem des Canvas transformiert Im Ponguniversum befinden sich der Ball und eine Anzahl von Strecken die die Hindernisse darstellen Der Ball hat keine Ausdehnung und hat zu jed
23. und daran dass interne Nachrichten nicht authentifiziert werden Es hat sich gezeigt dass wir wiederkehrende Problemstellungen verschieden gel st haben So haben sich beispielsweise f r Benutzerlisten in Applikationen zwei verschiedene Herangehensweisen herauskristallisiert In einigen Applikationen wird die Liste zentral gehalten und bei einer nde rung komplett auf alle Clients bertragen Im Chat jedoch wird die Liste zwar zentral auf dem Chatserver verwaltet und einem neuen Client komplett mitgeteilt Sp tere nderungen werden aber einzeln bekannt gegeben und jeder Client pflegt seine eigene Nutzerliste Es hat sich als hilfreich erwiesen das kommunikationsbasierte System durch die versendeten Nachrichten zu spezifizieren und zu dokumentieren ERLANG ist tats chlich gut geeignet Programme im Rapid Prototyping Verfahren zu ent wickeln Dies ist ein erkl rtes Ziel der Entwickler von ERLANG Nachdem wir erfolgreich einen Prototypen erstellt haben lie e GORN sich leicht und relativ schnell in einer anderen Program miersprache implementieren 30 ERLANG eignet sich hervorragend um nebenl ufige und vor allem verteilte Systeme zu reali sieren Die flexible Laufzeitumgebung erm glicht die Implementierung sehr modularer Systeme GORN hat gezeigt dass sich sehr dynamische Applikationen verteilt auf mehrere Rechner damit umsetzen lassen 31 A Benutzerhandbuch Dieser Abschnitt beschreibt die Installation des GORN Systems sowi
24. Anzahl von Kn pfen angezeigt werden kann 3 2 Das Mailsystem Das Mailsystem dient dem Austausch elektronischer Nachrichten Jeder Benutzer hat ein so ge nanntes Mailspool in dem alle Nachrichten dieses Benutzers innerhalb der Datenbank gespeichert werden Nachrichten werden mit dem Mailclient verfasst und abgeschickt Nat rlich k nnen Nach richten auch an Benutzer geschickt werden die gerade nicht eingeloggt sind Die Nachrichten k nnen ebenfalls mit dem Mailclient gelesen werden Neue Nachrichten werden als neu markiert damit der Benutzer die ungelesenen Nachrichten sofort erkennen kann Nachrichten k nnen beant wortet reply weitergeschickt forward und als gel scht markiert werden delete Als gel scht markierte Nachrichten k nnen dann endg ltig aus dem Mailspool entfernt werden expunge Das Zustellen und Ausliefern der Mails bernimmt die Serverside der Mailapplikation das Le sen und Schreiben der Clientteil Weiterhin gibt es noch ein Clientstaticmodul das sich bei der Serverside registriert und den Benutzer mit dem Nachrichtenfenster der Gornbar ber eingegan gene Mail informiert Beim Einloggen berpr ft der Clientstaticteil ob der Benutzer ungelese ne Nachrichten besitzt und zeigt gegebenenfalls eine entsprechende Nachricht im Logfenster der Gornbar an ber den selben Registrierungsmechanismus sorgt auch der Mailclient daf r dass die Nachrichtenliste immer aktuell ist d h wenn eine Nachricht eintrifft und der M
25. Die H henanzeige f r diesen Spieler wird bis zum oberen Fensterrand gezogen und rot eingef rbt GS gt C tetris winner Pid Mit dieser Nachricht wird der Client Pid zum Sieger erkl rt Bewertung Der Einfiigemodus always ist nicht optimal gel st Es kann beim Einfiigen von Zeilen passieren dass der Stein in das bereits vorhandene Spielfeld hineingemischt wird da w hrend des Hinzuf gens der Zeilen keine Kollisionserkennung stattfindet Au erdem ist der Stein w hrend des Einf gens ausgeblendet und nicht steuerbar was das Spiel zus tzlich verkompliziert 20 Im Einspielermodus gibt es kein Punktesystem oder hnliche Bewertungskriterien Ein Kri terium zur Punktevergabe k nnte die Anzahl der abger umten Zeilen oder die Dauer bis zum Ausscheiden sein Das Rauf Runterbewegen des Spielfeldes ist sehr langsam da die Informationen jedesmal f r das ganze Spielfeld zeilenweise kopiert werden 3 6 4 Pong Pong ist ein Spiel f r beliebig viele Spieler Bei dem Spielfeld handelt es sich um ein Polygon in dem sich ein Ball mit konstanter Geschwindigkeit bewegt Jede zweite Seite des Polygons ist durchl ssig und einem Spieler zugeordnet Diese werden als Homezones bezeichnet Die anderen Seiten sind fest Aufgabe der Spieler ist es den Ball nicht aus dem Polygon fliegen zu lassen Dazu hat jeder Spieler ein Paddle welches auf der Homezone bewegt werden kann Eine Runde wird verloren wenn der Ball die eigene Homezone passiert
26. Projekt Nebenl ufige Programmierung in Erlang Sommersemester 2001 Gorn Gorn On Random Nodes Raimund Jacob lt raimi0cs tu berlin de gt Andr Seidelt lt iluvatar cs tu berlin de gt Martin Grabm ller lt mgrabmue cs tu berlin de gt 2 November 2001 a good distributed wooden application Technische Universit t Berlin Fakult t IV Elektrotechnik und Informatik Petra Hofstedt Inhaltsverzeichnis 1 2 Einleitung 3 Systemarchitektur 3 21 Ben tzermodell 2 2 5 pda ras a a 3 20 Architektur td ls e a acabo te tata ei RA 3 2 3 GEF Das GORN Executable Format e 5 2 2 Die Servermodule 2 7 2 22 a8 a A Ade de da cl 6 2 4 1 Der GORN Prozess 2 2 2 Enno a a a G e aa a a 6 2 4 2 Der Userm n ger s o socos a sora e a peo e a a G T 2 4 3 Der Applicationmanager 2 2 2 a 9 24A Der DB Server x 1 2er 2 a a a a a de de de da T y 10 Applikationen 11 3 1 Die GorbatiuVi te a e e e dt e a a 11 3 2 Das Mailsystem 2 4 it A A ae sed 11 3 3 Das Chatsystem 2 u ue naar en ee ee e 13 3 4 Das Talksystem u ser 2a sh lee ee te 14 3 5 Die Verwaltungsapplikation nn nn 16 3 6 DIe Spiele teta ls da o E A A e ds a A 16 3 6 1 Der Gameserv er ra a a ara naar 17 3 0 2 Das gane Modil 22222044 E a ana 17 3 0 3 GORNIIS Sa wa aa A A a 19 A LS A AN 21 A O A ON RN 25 3 7 Die About Box n on nn 26 3 8 Die Bibliothek libgorn e 26 Fazit 28 4 1 Die Programmi
27. ail Client l uft gerade wird eine neue Liste der Mails angefordert Dieser Informationsaustausch ber neue Mails ist in Abbildung 4 als biff bezeichnet 11 Mail serverside clientstatic server node client node client Abbildung 4 Mail Applikation Nachrichten Referenz Mail CS C gt S mail register Pid Cookie Username Ein Clientstatic oder Client meldet sich beim Mail Server an um You have new Mai Benachrichtigungen zu erhalten 1 TM CS C gt S mail unregister Pid Cookie Username Ein Clientstatic oder Client meldet sich wieder ab S CS C mail you_have_new_mail_tm Username src Eine Mail von Username _src ist angekommen C gt S mail list Pid Cookie Username Fordert alle Mails aus der Mailbox von Benutzer Username an S gt C mail list Listofmessages Liefert alle Messages aus der Mailbox in einer Liste von message Records C S mail send Cookie Username Message Schickt eine Mail vom Benutzer Username an den die Empf nger der die in der Message sendmessage Record angegeben ist sind Ung ltige Nachrichten erzeugen eine Bounce Mail C gt S mail setstate Cookie Username Msgld State Setzt den Status der angegebenen Msgld auf State C gt S mail expunge Cookie Username Entfernt alle Messages aus der Mailbox des Benutzers Username deren Status D deleted ist Bewertung Die
28. d in einem Canvas anzuzeigen Dies ist ein wenig umst ndlich da es nicht m glich ist das Bild in Form von Bin rdaten direkt an das Gra fiksystem zu bergeben So muss der Client Sorge tragen dass die tempor re Datei wieder entfernt wird 3 8 Die Bibliothek libgorn In den Applikationen des GORN Systems gibt es nat rlich wiederkehrende Probleme deren L sun gen in einer Bibliothek gesammelt werden k nnen Zu diesem Zweck wurde die 1ibgorn Bibliothek 26 eingef hrt die in vielen Linklisten der Applikationen vorkommt Eine kleine Gruppe von Funktionen dient dazu das Look amp Feel einheitlich zu halten Das sind Funktionen die Schriftarten vorgeben oder einen String zusammensetzen der als Fenstertitel verwendet werden kann Auch ein zusammengesetztes grafisches Element der Schriftscroller ist hier implementiert Die wichtigste Gruppe von Funktionen in der Bibliothek besch ftigen sich mit Zufallszahlen Es gibt Funktionen die zuf llige Flie komma oder Integerzahlen mit gegebenen Grenzen erzeugen Dabei wird das random Modul benutzt das zu ERLANG geh rt Allerdings wird bei Bedarf der Seed automatisch festgelegt So ist es in einer Applikation einfacher den Zufallszahlengenerator zu benutzen auch an Stellen an denen nicht klar ist ob der Generator schon initialisiert wurde oder nicht Zum Initialisieren des Generators kommt eine etwas kompliziertere Funktion zum Einsatz Das Problem ist dass der ERLANG Zufallsge
29. dem Bet tigen des Chat Knopfes begeben Sie sich in den Chatkanal des GORN Systems Auf der rechten Seite befindet sich eine Liste der teilnehmenden Nutzer Im gro en Feld links findet das Chatgeschehen statt Ihre Eingaben t tigen Sie in der Zeile unten und schlie en diese dann mit der Enter Taste ab Wenn ein Nutzer etwas schreibt wird der Name dem Text farbig vorangestellt und im Chat fenster ausgegeben Auch ein Agieren im Chat ist m glich Dazu wird der Eingabe ein me vorangestellt und eine Aktion in der dritten Person beschrieben Dies wird im Chat wiederum farbig gekennzeichnet Verl sst ein User den Chat oder ein neuer User betritt diesen erscheint eine andersfarbige Anzeige und die Liste auf der rechten Seite ver ndert sich Der Info Knopf fordert vom Server genaure Informationen zu den in der Userliste selektierten Usern an Das beschr nkt sich im Moment auf den vollen Realnamen Mittels des Close Knopfes k nnen Sie den Chat verlassen A 5 Talk Talk dient zur direkten Kommunikation von zwei Teilnehmern Wenn Sie mit jemandem aus der Arbeitsgruppe talken m chten w hlen Sie den Namen aus der Userliste in der Gornbar aus und bet tigen den Talk Knopf Der User muss gerade eingeloggt sein Wenn der User den Talk annimmt tippen Sie Ihren Text im oberen Fensterteil ein Im unteren erscheint der Text des Gespr chspartners Sie k nnen auch die Talkapplikation starten ohne einen User ausgew hlt zu habe
30. e Spieler bekommt den im oberen Teil des Spielfensters angezeigten Bonus auf sein Punktekonto gutgeschrieben Die Punkte aller Spieler werden in der Spielerliste angezeigt Die Synchronisation des Spiel geschieht ber Gameticks Der Server sendet in bestimmten Abst nden eine Nachricht an alle Clients Diese antworten dann mit einer Nachricht welche die Aktion enth lt die in diesem Tick durchgef hrt werden soll z B ein Drehen nach links oder rechts Sobald alle Antworten beim Server eingetroffen sind wird der Zustand des Spiels um einen Schritt weiterberechnet Dabei werden dann die Aktionen der Spieler ausgewertet und flie en in die Berechnung ein Des Weiteren werden dann alle Kollisionstests durchgef hrt und gepr ft ob das Spiel zu Ende ist weil nur einer der Spieler im Spiel geblieben ist Nachrichten Referenz Tron TC TS tron join Username Pid Der Tronclient Pid des Benutzers Username meldet sich beim Tronserver an Dies geschieht zum Beginn des Spiels TC TS tron leave Username Der Tronclient des Benutzers Username meldet sich ab nachdem der Benutzer Close ge dr ckt hat TC TS tron ready Username Diese Nachricht wird an den Server geschickt wenn im Zustand idle auf Start gedr ckt wurde TS TC tron ready Alle Spieler haben auf den Start Knopf geklickt und der Zustand des Spiels wechselt auf waiting TS TC tron tick Ticks Bonus Ein Gametick ist ver
31. e Stein nach links bzw rechts gedreht werden Die Pfeiltaste nach unten l sst den Stein schneller nach unten sinken Dort sollten die Steine so abgesetzt werden dass keine L cke ensteht Immer wenn eine Zeile ganz gef llt ist wird diese aus dem Spielfeld entfernt Schaffen Sie es 2 3 oder sogar 4 Zeilen eine TetrisTM gleichzeitig abzur umen bekommen alle anderen Spieler von unten 1 2 oder 4 Zeilen dazugeschoben und deren Spielfeld f llt sich dementsprechend In dem dazugeschobenen Block ist eine Spalte frei so dass er schnell wieder zu f llen ist Sie verlieren ein Spiel sobald ein neu hereinfallender Stein nicht mehr bewegt werden kann Ihr Spielfeld also gef llt ist Gewinner ist der Spieler der zuletzt brig bleibt 35 Auf der rechten Seite des GoRNtris Fensters wird eine Liste der Mitspieler angezeigt Direkt neben der Spielfl che befindet sich in der selben Reihenfolge eine Reihe von senkrechten Balken Diese Balken geben die F llst nde der Spielfl chen der Mitspieler an Ist einer der Balken rot und in voller H he ist dieser Spieler bereits ausgeschieden A 7 2 Gorntris konfigurieren Der erste Schieberegler Initial delay for drop speed gibt an wieviel Zeit in Millisekunden vergeht bevor ein Stein automatisch eine Zeile tiefer rutscht Dies ist ein Initialwert da die Steine sp ter immer schneller fallen Eine kleinere Zahl hier bewirkt ein schnelleres Fallen der Steine Der zweite Schieberegler Number of
32. e die Benutzung der einzelnen Elemente Dabei wird zu jedem Teil der Applikation beschrieben was Sie sehen k nnen und welche Aktionen m glich sind A 1 Der GORN Server Die Installation des GORN Servers umfasst zwei Schritte e Kompilieren der ERLANG Module e Initialisierung der Datenbank Zum Kompilieren der Module existieren in allen Unterverzeichnissen von src Makefile Dateien So kann das ganze Projekt mit make im src Verzeichnis bersetzt werden Soll nur der Serverteil bersetzt werden ist make im src gorn Verzeichnis auszuf hren Zwei Skripte zum Initialisieren der Datenbank stehen zur Verf gung Zum einen kann das Skript make db benutzt werden wenn auf dem Rechner die ERLANG Option name funktioniert Andernfalls sollte das Skript make db sname benutzt werden Dieses Skript wird die Datenbank auf der aktuellen Node im Verzeichnis db anlegen Stellen Sie sicher dass dieses Verzeichnis nicht existiert bzw leer ist bevor Sie eines der Skripte ausf hren Um eine existierende Datenbank erst zu l schen bevor sie neu erzeugt wird stellt das Makefile in src gorn zwei Targets zur Verf gung make db reinit bzw make db reinit sname Nachdem die Datenbank initialisiert wurde kann der GORN Server mit dem Kommando gorn gestartet werden wenn ERLANG auf diesem Rechner die Option name unterst tzt Andernfalls ist wiederum gorn sname zu benutzen Dies wird den Server starten und dieser ist nun b
33. el f r beliebig viele Mitspieler Das Spielfeld besteht aus einem Raster einstellbarer Gr e auf dem jeder Spieler eine Schlange dargestellt durch einen Pfeil bewegen kann Die Bewegungsm glichkeiten sind auf die vertikalen und horizontalen Richtungen eingeschr nkt Das Ziel ist es die Schlange so lange wie m glich ber das Raster zu bewegen ohne mit dem Schlangenkopf Pfeilspitze den eigenen Schwanz Pfeil den eines Mitspielers oder die Begrenzungen des Spielfeldes zu ber hren Am Beginn eines Spiels informiert der Tronserver alle Tronclients ber einige Konfigurati onseinstellungen die die grafische Darstellung der Spielfl che betreffen Dann beginnt die erste Spielrunde Sowohl der Server als auch die Clients befinden sich nun im Zustand idle und warten darauf dass alle Mitspieler auf den Start Knopf dr cken Nach dem Dr cken wechselt der jeweilige Client in den Zustand waiting Sobald alle Spieler gestartet haben geht der Server ebenfalls in den Zustand waiting und beginnt einen dreisek ndigen Countdown zu z hlen damit sich die Spieler auf den Spielbeginn einstellen k nnen Sobald die Null erreicht ist beginnt das Spiel und sowohl der Server als auch die Clients gehen in den Zustand running In diesem Zustand bleiben sie bis ein Spieler gewinnt weil alle anderen gegen eine Wand oder die Schlange eines Mitspielers gesto en sind In diesem Fall wird der Name des Gewinners allen Mitspielern bekannt gegeben und der berlebend
34. em Zeitpunkt eine Position und einen Bewegungsvektor Die Position ist ein einfaches Tupel aus der X und der Y Koordinate Der Bewegungsvektor besteht aus einem Vektor der L nge 1 der die Richtung vorgibt und einer L ngenkomponente Diese Aufteilung ist bei der Berechnung vorteilhaft da Richtung und L nge teilweise voneinander getrennt benutzt werden Au erdem bleibt die Genauigkeit erhalten wenn ein Vektor sehr kurz werden sollte Ein Spielschritt besteht daraus die Bewegungen der Spieler entgegenzunehmen und den Ball weiterzubewegen Dabei muss der Ball an Hindernissen reflektiert und das berschreiten einer Homezone angezeigt werden Um Kollisionen mit einer Strecke zu berechnen kommt das in Ab bildung 11 gezeigte Schema zum Einsatz Die Bezeichnungen lehnen sich an die Variablenbezeich nungen in den entsprechenden Funktionen an Die Idee ist den Schnittpunkt mit einer Strecke sowie den neuen Bewegungsvektor von diesem Punkt aus zu berechnen Dazu werden die Geraden der Strecke und der Flugbahn konstruiert und der Schnittpunkt bestimmt Liegt der Schnittpunkt auf der Strecke ist eine Kollision aufgetreten Aus der L nge des Bewegungsvektors und dem Ab stand des Balles zum Schnittpunkt wird bestimmt wie weit der Ball von der Strecke wegbewegt werden muss Die Richtung des neuen Vektors der Ausfallswinkel wird durch eine Konstruktion 21 von Geraden Loten und Hilfspunkten bestimmt Dieses Schema versagt allerdings wenn der Ball se
35. emacht wurden k nnen diese durch Save aktiviert werden und der neue User kann sich anmelden Das L schen von Benutzern ist ebenfalls den privilegierten Benutzern vorbehalten Dazu ist in der Userliste der Adminapplikation der entsprechende Nutzer auszuw hlen und der Delete Knopf zu bet tigen In einem frisch installierten GORN System existieren einige normale Benutzer raimi ilu mgrabmue petra ohne Passwort und ein privilegierter Benutzer root mit dem Passwort root Die ser soll als Ausgangspunkt f r die eigene Benutzerverwaltung dienen Zun chst sollte das Passwort ge ndert und die Beispielbenutzer gel scht werden Danach k nnen neue Nutzer eingetragen wer den A 7 Spiele Gorntris Tron Pong Die Spiele verbergen sich hinter den gleichnamigen Kn pfen in der Gornbar und benutzen das gleiche Verfahren zum Er ffnen von Spielen oder der Teilnahme Zun chst erscheint ein Fenster in dem ein existierendes Spiel in einer Liste ausgew hlt werden kann und an dem man mittels des Drucks auf Join teilnimmt wenn die maximale Anzahl von Mitspielern noch nicht erreicht ist W hrend auf andere Spieler gewartet wird wird ein kleines Fenster angezeigt in dem die aktuelle Konfiguration des Spiels zu sehen ist Durch Dr cken des Quit Knopfes k nnen Sie jetzt noch das Spiel verlassen Im Spielauswahlfenster befindet sich neben der Liste der noch nicht begonnenen Spiele ein Refresh Knopf der diese Liste aktualisie
36. emedium f r den Server dient Der Client hat sehr wenig Information Beispielsweise kann im Client kein Zusammenhang zwischen der eige nen Spielernummer und der Highscoreliste bzw dem eigenen Paddle hergestellt werden Deshalb ist es nicht m glich intelligente automatische Spieler zu implementieren Diese sind sozusagen blind da sie nicht wissen welches Element der Paddles Liste sie bewegen In unserer Anwendung ist das nicht problematisch in entsprechenden Applikationen muss so etwas aber ber cksichtigt werden Eine der gr eren Schw chen des Spiels ist dass es synchron l uft Ein neuer Gametick beginnt also erst wenn der alte abgeschlossen ist Bei langsamen Netzsegmenten oder hoher CPU Last auf einem Client beginnt das Spiel zu ruckeln Es w re aber m glich einen Gamtick beginnen zu lassen bevor der alte vollst ndig abgeschlossen ist Spieler die nicht rechtzeitig antworten werden interpoliert oder gar nicht bewegt Damit sinken die Chancen eines solchen Spielers die anderen k nnen jedoch ruckelfrei spielen Kommerzielle Spiele betreiben einigen Aufwand um Spieler mit langsamer Anbindung mitspielen zu lassen Ebenfalls verbesserungsf hig ist das Punktesystem des Pongspiels Im Moment k nnen Mitspie ler nur schlechter werden der beste Spieler hat immer null Punkte Denkbar w re die Ballverluste in ein Verh ltnis zu Ballkontakten des eigenen Paddles zu setzen 24 3 6 5 Tron Tron ist ein einfaches Geschicklichkeitsspi
37. enster ein Info Knopf angezeigt der nach dem Markieren eines oder mehrerer Benutzer in der Benutzerliste Informationen zu diesen Benutzern im Ausga befenster anzeigt Die Verwaltung der Benutzer im Chat erfordert dass der Server immer wei welche Benutzer sich gerade im Chat befinden Dazu registrieren sich die Chatclients beim Starten beim Chatserver mit einer join Nachricht Die Antwort enth lt eine Liste aller Benutzer im Chat Sollte ein weiterer Benutzer den Chat betreten oder ihn verlassen werden alle registrierten Clients benachrichtigt Auf diese Weise verwaltet jeder Client seine eigene Liste von Chatpartnern Zus tzlich registrieren die Clients sich beim Usermanager um den Status der anderen Benut zer zu berwachen Wenn ein Teilnehmer sich ein oder ausloggt bzw away geht wird eine entsprechende Meldung im Chatfenster ausgegeben Nachrichten Referenz Chat C gt S chat join Pid Cookie Username Ein Client m chte am Chat teilhaben Der Server pr ft Cookie und Username und f gt Pid und Username seiner Clientliste hinzu S gt C chat welcome Listofusers Der Server hat den Client in den Chat aufgenommen und bermittelt die Liste der teilha benden Benutzer S gt C chat join Username Ein weiterer Benutzer betritt den Chat Der Username wird in die angezeigte Userliste aufgenommen 13 C gt S chat leave Cookie Username Message Der Client m chte den Chat mit der gegebenen
38. er ndert sich der Ausfallswinkel zus tzlich mit der aktuellen Geschwindigkeit des Paddles Dies ist aber nicht implementiert da vom Paddle nur die Position nicht aber die Bewegungsrichtung bekannt ist Au erdem m sste die Berechungsmethode ge ndert werden da im Moment kein Unterschied zwischen festen W nden und Paddles gemacht wird bzw keine Strecke einen Bewegungsvektor hat Der Initiator kann weiterhin automatische Spieler hinzuf gen Diese eigenst ndigen Prozes se bewegen ihre Paddles zuf llig ber ihre Homezone So lassen sich gr ere Teilnehmerzahlen simulieren Nachrichten Referenz Pongspiel PS gt C pong welcome Numplayers Playernum Universe Obstacles Scorelist Diese Nachricht wird vom Server gesendet sobald das Spiel gestartet werden soll und alle Mitspieler bekannt sind Numplayers gibt die Anzahl der Mitspieler an Playernum die ei gene Spielernummer Diese beiden Werte werden ben tigt um zu bestimmen um welchen Winkel die Weltkoordinaten gedreht werden m ssen damit die eigene Homezone unten ist Alle Spieler werden durch ihre Spielernummer identifizert Das Argument Universum gibt die Ausdehnung des Universums an Dieser Wert betr gt im Moment immer 1000 Alle 22 Berechungen im Universum finden also zwischen den X Y Koordinaten von 500 bis 500 statt Obstacles enth lt eine Liste von Strecken die fest im Universum liegen Sie werden durch wei e Linien angezeigt Scorelist enth lt eine Assoziat
39. ereit Verbindungen von Gornbars anzunehmen Der Prozess hat sich mit dem Namen gorn registriert 32 A 2 Die Gornbar Zun chst muss die Clientapplikation kompiliert werden Dazu muss lediglich der Befehl erlc gornbar erl aufgerufen werden Alternativ steht auch hier ein Makefile zur Verf gung Zum Starten der Gornbar sollte eines der Skripte gornbar oder gornbar sname verwendet werden je nachdem ob die lokale ERLANG Installation mit der Option name oder sname funktioniert Die Skripte ben tigen ein Kommandozeilenargument welches aus dem Na men des Rechners besteht auf dem der GORN Server l uft Im Falle des Skriptes gornbar muss dieser Name voll qualifizert sein Dieses Argument wird in einer Datei gorn server zwischengespeichert so dass es bei weiteren Aufrufen nicht noch einmal mit angegeben werden muss Ein vollst ndiger Aufruf kann also so aussehen gornbar aeneas cs tu berlin de Wenn die Gornbar gestartet wird erscheint am Anfang eine Ausgabe wie gornbar Configured for server gorn aeneas cs tu berlin de gornbar ping pong Dabei bedeutet das pong dass die Kommunikation des ERLANG Systems funktioniert Erscheint hier pang ist eine Kommunikation nicht m glich und GoRN kann nicht funktionieren Nach dem Starten der Gornbar sind drei Kn pfe zu sehen Der Away Knopf hat hier noch keine Funktion und mit dem Close Knopf kann GORN jederzeit verlassen werden Um sich am GORN System anzumelde
40. ersprache ERLANG 2 nn nn 28 4 2 Bewertung der Arbeitsergebnisse 22 2 2 o e e 30 Benutzerhandbuch 32 ALT Der GORN Server s Tauaana Sana ee a dr 32 4 24 Die Gornbat v nes a aa A een ole he he ae ar ie ar ap a 33 AS Email e 2 AA nee Are AA rer 33 AA O E 34 A A er Me Ze ee a EEE RL de 34 ARO Admin A DDR EEE RA A a Da bean 34 A 7 Spiele GORNtris Tron Pong 2 2 22 mono 35 A 7 1 GoRNntris spielen 2 22 22 Coon nn 35 A 7 2 GORNtris konfigurieren ss s Comm n nn 36 AO Pors epelen ii lan Kita ea ee de 36 ATA Pong konfigurieren 2 2 CC CC nun 36 A 7 5 Tronsspielen 2 4 4 nad Altes een 37 A 7 6 Tron konfigurieren CC Comm nn 37 Ar8 About Box ar see Mare ar A ei 37 1 Einleitung Diese Ausarbeitung begleitet die Applikation GORN ein verteiltes Kommunikationssystem f r den Einsatz in kleinen bis mittleren Arbeitsgruppen Die Arbeit soll als Dokumentation des Pro gramms und als Benutzerhandbuch dienen Ziel des Projektes war unter Verwendung der Pro grammiersprache ERLANG eine verteilte nebenl ufige und kommunikationsbasierte Anwendung zu entwickeln In Abschnitt 2 werden die grundlegende Architektur unseres Systems sowie die Servermodu le vorgestellt Weiterhin sollen die Systemkomponenten n her erl utert und die Kommunikation zwischen einzelnen Prozessen beschrieben werden Im darauf folgenden Abschnitt 3 beschreiben wir die Applikationen des GORN Systems Abschlie end werden die Autoren in Abschnitt 4 ihre E
41. g Param Oldconfig Diese Funktion wird vom game Modul aufgerufen um die Pa rameter f r das Spiel einzustellen Die Funktion wird mit den Startparametern der GORN Applikation und einer Liste der Optionen aufgerufen diese Liste ist beim ersten Aufruf leer Als R ckgabewert erwartet das game Modul ein Zwei Tupel mit einem darstellbaren Text der die Einstellungen beschreibt und eine Liste mit den neuen Einstellungen oder false falls der Benutzer Cancel angew hlt hat server_loop Params Config Clientlist Diese Funktion muss die Serverfunktionalit t des Spiels implementieren Sie wird mit den Startparametern den Spieleinstellungen und einer Liste der Clients aufgerufen Diese Liste enth lt Usernamen und PIDs der Teilnehmer Um das Aushandeln eines Spiels zu starten m ssen die Spiele game connect Modulname Parameterliste aufrufen Die Funktion kehrt entweder mit dem Pid des Spielservers zur ck oder mit false falls der Benutzer den Vorgang abgebrochen hat Die Dialoge des game Modul Der Join Dialog In diesem Dialogfeld wird die Liste der verf gbaren Spiele alle f nf Sekunden vom Gameserver abgeholt und angezeigt Der Benutzer hat die M glichkeit einem Spiel bei zutreten oder ein neues zu erstellen Wenn er ein neues Spiel erstellt wird an den Gameserver eine game add Nachricht geschickt Der Create Dialog In diesem Dialog werden die Einstellungen f r ein Spiel verwaltet Der Be nutzer kann Spieleinstellungen nde
42. ginnt Sie k nnen das Spiel jederzeit ber den Close Knopf verlassen Ihr Paddle wird dann so gro wie Ihre Homezone so dass alle anderen Spieler ungest rt weiterspielen k nnen Sollten Sie das Spiel allein spielen steuern Sie drei Paddles in einem Sechseck A 7 4 Pong konfigurieren Die erste Einstellung ist die Geschwindigkeit des Balles Ball Speed Zum besseren Verst ndnis wird diese in Metern pro Sekunde angegeben Das sichtbare Spielfeld hat einen Durchmesser von 1000 Metern Der zweite Schieberegler gibt an wie schnell sich das Paddle bewegt In der Voreinstellung von 100 dauert es eine Sekunde um das Paddle von einer Seite der Homezone auf die andere zu bewegen Der n chste Schieberegler Paddle Size gibt an wie gro das Paddle im Verh ltnis zur Ho mezone ist Je gr er es ist desto einfacher ist es den Ball zu treffen Die Einstellungen Smoothness bestimmt wieviele Berechnungsschritte pro Sekunde durch zuf hren sind Ein h herer Wert bedeutet eine fl ssigere Bewegung aller Elemente aber auch eine h here Belastung des Netzwerkes und des Rechners Mit niedrigen Werten ist es m glich ber eine langsame Verbindung wie Modem oder ISDN zu spielen Letztendlich k nnen Sie noch w hlen ob automatische Spieler sogenannte Bots am Spiel teilnehmen sollen Diese verhalten sich sehr unkontrolliert es lassen sich aber Spiele mit sehr vielen Teilnehmern simulieren F r gro e und schnelle Paddles
43. h auf der Clientnode gespeichert wird Der Cookie ist f r jede eingeloggte Gornbar eindeutig Er wird sp ter benutzt um sicherzustellen dass kritische Messages also solche die den Zustand auf dem Server ndern nur von Clients akzeptiert werden deren Identit t bekannt und berpr ft ist GB gt UM un logout Cookie Username Message Der User will die Arbeitsgruppe verlassen Die Message ist eine Signoff Nachricht die in Applikationen sinnvoll verarbeitet werden kann Beispielsweise wird sie im Chat angezeigt um den anderen Benutzern mitzuteilen warum ein Benutzer den Chat verlassen hat Der Zustand des Benutzers ndert sich auf offline Alles was serverseitig mit dem Cookie assoziiert war wird gel scht C gt UM un register Pid Cookie Username Ein Client registriert sich als Observer der Userliste Der Usermanager schickt Anderungen in der Userliste also z B Zustands nderungen der User an alle registrierten Observer C gt UM um unregister Pid Cookie Username Client meldet sich als Observer ab Keine weiteren Nachrichten des Usermanagers sollen an diese Pid geschickt werden C gt UM un list Pid Fordert die Liste aller Benutzer an Diese Nachricht wird von Clientapplikationen benutzt UM gt C un list Userlist Die Liste aller Benutzer wird geschickt Diese enth lt user Records GB gt UM un shortlist Pid Fordert die Liste aller Benutzer an Diese Nachricht wird von der
44. ieler Tetris so viele Zeilen wie m glich zu entfernen sondern als letzter Spieler brig zu bleiben Bei GORNtris erhalten alle Spieler die gleichen Steine in der selben Reihenfolge Zu diesem Zweck werden die Steine vom Server generiert und dort in einer Liste verwaltet Das Spiel ist verloren wenn GORNtris beim Erzeugen eines neuen Steins feststellt dass dieser nicht mehr bewegt werden kann also das Spielfeld bis oben mit Steinen gef llt ist Um das Spiel zu gewinnen muss der Spieler einerseits seine Steine so platzieren dass er weiterhin handlungsf hig bleibt andererseits muss er seinen Mitspielern dies erschweren Zu diesem Zweck kann er durch das gleichzeitige Entfernen mehrerer Zeilen seinen Mitspielern von unten Zeilen zum Spielfeld hinzuf gen Diese Strafzeilen enthalten an einer zuf llig ausgew hlten Stelle eine L cke damit sie nicht sofort wieder verschwinden F r das Einf gen der Strafzeilen sind zwei verschiedene Modi implementiert Der erste Modus f gt die Zeilen jederzeit ein always der zweite Modus akkumuliert die einzuf genden Zeilen bis das n chste mal ein Block abgesetzt wird drop GoRrntris verwaltet alle Informationen das Spielfeld betreffend in den rectangle Objekten des Canvas Das bedeutet dass es keine weitere Datenstruktur mit den Spielfeldinformationen gibt GORNtris erkennt einen Block des Spielfeldes als frei wenn dieser die Farbe schwarz hat Da die W nde des Spielfeldes grau sind ist es nicht m
45. in Benachrichtigungsfenster in dem er die Anfrage annehmen oder ablehnen kann Nimmt er an wird die Talkapplikation gestartet Die Nachfrage beim Benutzer bernimmt die Clienstatickomponente des Talksystems nach dem sie von der Serverside eine Talk Anfrage des anderen Benutzers erhalten hat Die Serverside beschr nkt sich auf die Vermittlung von Talk Anfragen die eigentliche Kommunikation zwischen den Benutzern findet ohne Umweg zwischen den Talkclients statt Die Kommunikation zwischen dem Clientstatic und dem Talkserver wird dadurch erm glicht dass der Clientstatic sich wenn er gestartet wird also wenn der Benutzer sich einloggt beim Talkserver registriert Sobald nun ein Talkclient eine Anfrage an den Server schickt ermittelt dieser anhand des bergebenen Benutzernamens den zum Partner geh renden Clientstatic und leitet die Anfrage an diesen weiter L uft kein Clientstatic f r diesen Benutzer wird die Anfrage vom Server abgelehnt Sollte die Anfrage vom Gegen ber abgelehnt werden verschickt der Clientstatic die Ablehnung an den initiierenden Talkclient Wird die Anfrage angenommen startet der Clientstatic den Talk client indem er dem Applicationmanager eine Nachricht zum Starten der Talkapplikation schickt Sobald vom Applicationmanager eine positive R ckmeldung kommt die die PID des gestarteten Talkclients enth lt wird dem Talkpartner die PID bermittelt und die Verbindung besteht Um das automatische Starten des Talkclie
46. iniert Nachrichten Referenz Pong Serverinterne Koordination PS PS pong timefortick Dies ist wohl die wichtigste Nachricht da sie das Fortschreiten des Spiels forciert Wenn der Pongserver diese Nachricht empf ngt berechnet er den n chsten Spielschritt und gibt einen tick aus Ausgel st wird diese Nachricht beim Empfangen der tack Nachricht des letzten Clients wenn also alle Spielz ge der Mitspieler bekannt sind Allerdings wird timefortick nicht direkt ausgel st sondern mittels timer send_after welches diese Nachricht erst nach Ablaufen der Verz gerung zwischen zwei Ticks ausliefert Sollte ein Berechnungschritt er geben dass ein Spieler den Ball fallengelassen hat wird keine weitere Tickwelle ausgel st sondern nur noch die Anzeige der Clients aktualisiert und mit der folgenden Nachricht eine neue Runde begonnen PS gt PS pong newround Hiermit wird eine neue Runde begonnen d h ein neuer Ballzustand bestimmt Dazu wird der Ball zuf llig in der Umgebung des Mittelpunktes platziert und auf eine zuf llig gew hlte Homezone gerichtet Danach beginnt der Countdown Dieser besteht aus einer Kette von Nachrichten die durch timer send_after nacheinander ablaufen Dabei wird jedesmal ein Text auf dem Client ausgegeben Der Beginn einer Runde wird am Ende einer bisherigen Runde ausgel st oder von der Funktion die den Serverzustand initial bestimmt Bewertung Bemerkenswert ist dass der Client nur als Aus Eingab
47. insamen Server verbunden haben Dies ist f r die Kommunikationsgeschwindigkeit ideal da benachbarte 28 Knoten direkt kommunizieren k nnen ohne Umwege in Kauf zu nehmen Der negative Effekt ist allerdings dass es nicht m glich ist ERLANG Knoten durch maskierende Firewalls NAT Net work Address Translation uneingeschr nkt zu betreiben So ist z B GORN nur durch eine solche Firewall zu benutzen wenn die Spiele nicht verwendet werden Diese funktionieren nicht und es werden keine Fehlermeldungen erzeugt Weiterhin bemerkenswert ist die Garbage Collection des ERLANG Systems Im normalen Be trieb ist vom Garbage Collector nichts zu bemerken Lediglich in den rechenintensiveren Spielen macht er sich nach einer Zeit bemerkbar Das Spiel Tron beispielsweise wird merklich langsamer da die Linien in immer l nger werdenden Listen verwaltet werden Das Spiel Pong setzt einige Rechenleistung voraus da die ganze berechnete Welt in dynamisch erzeugten und st ndig mani pulierten Listen gehalten wird Von gro er N tzlichkeit ist der ERLANG Debugger Dieser erm glicht die Untersuchung eines laufenden ERLANG Prozessgeflechts Der Debugger selber unterst tzt alle g ngigen Techniken wie Breakpoints und Step by Step Ausf hrung Leider ist es uns nicht gelungen die Clientappli kationen des GORN Systems im Debugger zu untersuchen Vermutlich ist uns dort das vollst ndig dynamische Nachladen und Distributieren des Bin rcodes in die Quere gekomme
48. invalidcookie Der Client hat einen falschen Cookie bermittelt C gt AM appman logout Cookie Username Der Client m chte ausgeloggt werden Alle Prozesse des Clients bekommen eine KILL Nachricht geschickt Bewertung Der Applicationmanager hat nur Zugriff auf Prozesse die er direkt gestartet hat Sollte einer dieser Prozesse eigene Prozesse starten kann der Applicationmanager diese nicht beenden Wenn ein Prozess terminiert k mmert sich der Applicationmanager nicht um dessen R ckga bewert Im normalen Betrieb ist das kein Problem st rzt eine Applikation allerdings ab wird die Fehlermeldung nicht sichtbar Wie bereits erw hnt sucht der Applicationmanager nur beim Start nach neuen Applikationen Dieses Caching macht es n tig den GORN Server neu zu starten wenn eine neue Applikation bereit gestellt werden soll 2 4 4 Der DB Server Der Datenbankserver verwaltet die Daten die in GORN langfristig gespeichert werden m ssen Er benutzt die in ERLANG enthaltene Datenbank Mnesia zur Datenablage Der DB Server kommuni ziert nicht ber Nachrichten mit den anderen Modulen sondern stellt Funktionen zur Verf gung die den Zugriff auf die Mnesia Tabellen kapseln Dadurch k nnen nur serverseitige Module den DB Server benutzen Zur Zeit werden drei Tabellen vom DB Server gehalten davon werden aber nur die ersten beiden tats chlich auf der Platte abgelegt Die Daten der Benutzer werden in der Tabelle dbuser gespeichert
49. ivliste mit Spielernamen als Atom und Punktest nden Sobald er diese Nachricht erhalten hat besitzt der Client genug Informationen um das Anzeigefenster aufzubauen PS gt C pong stuff Ballstate Paddles Steps Mit dieser Nachricht wird der Client aufgefordert auch die beweglichen Elemente der Welt zu erzeugen Der Client legt alle ben tigten Linien und den Ball als grafische Elemente an Sp ter werden diese Elemente nur noch konfiguriert und dadurch verschoben Diese Nachricht wird gesendet wenn eine neue Runde anfangen soll Ballstate enth lt Richtung und Position des Balles in einem gleichnamigen Record Paddles ist eine Liste von Strecken die die beweglichen Paddles darstellen Steps ist die Anzahl der Schritte die gebraucht werden um das Paddle einmal komplett ber die Homezone zu bewegen Diese Information ist nur f r die automatischen Spieler interessant im normalen Client wird sie ignoriert PS gt C pong info Text Diese Nachricht wird verwendet um eine Zeile Text auf dem Client auszugeben Dies sind Countdown und Spielfortschrittsanzeigen Der Client wertet den Text nicht aus sondern zeigt ihn nur an C gt PS pong leave Playernum Diese Nachricht wird vom Client gesendet wenn der Spieler das Spiel verlassen will Verlassen kann der Spieler das Spiel wenn er den Close Knopf bet tigt oder das Fenster anderweitig geschlossen wird Der Server identifiziert den Spieler anhand der Spielernummer Pla
50. kanfrage des Users Username_src vom Prozess Pid C C talk ok Pid Ein Client hat die Talkanfrage eines anderen Clients angenommen Die Pid ist der eigene Prozess Diese Pid und der Initiator k nnen sich jetzt unterhalten C gt C talk nack Username User lehnt ab mit dem Client zu reden direkte Verbindung S gt C talk nack Username User ist momentan nicht online deshalb lehnt der Server die Anfrage ab C gt C talk insert Text Austausch eines getippten Zeichens C gt C talk disconnect Beenden einer Talk Verbindung Bewertung Eine Einschr nkung des ERLANG Grafiksystems hat sich bei der Entwicklung der Talkapplikation gezeigt Wenn Text mit der Maus kopiert und in das Eingabefenster eingef gt wird kann dieser nicht an den Talkpartner bermittelt werden Der Grund daf r ist dass es keine dokumentierte M glichkeit gibt solche Copy amp Paste Events abzufragen 15 3 5 Die Verwaltungsapplikation Das Admin Tool dient dazu Benutzer Accounts anzulegen zu bearbeiten und zu l schen Privi legierte User k nnen die Daten aller anderen User ndern unprivilegierte User d rfen nur ihre eigenen Daten bearbeiten Es gibt keinen Clientstatic Teil Der Client kommuniziert direkt mit dem Usermanager um Userdaten abzufragen bzw sie eintragen zu lassen Die Daten eines Benutzers umfassen seinen Usernamen der nicht ge ndert werden kann einen vollen Namen sein Passwort und die Angabe
51. n Ein etwas gr erer Schwachpunkt von ERLANG ist die Graphikschnittstelle Tk Diese ist durch aus verbreitet aber eigentlich nicht besonders sch n Tk l sst sich relativ einfach programmieren das Zusammenbauen einer grafischen Nutzerschnittstelle resultiert jedoch in sehr viel schlecht zu testendem Code der zudem kaum zu warten ist Wurde in einem Fenster ein System aus Frames aufgebaut kann es sehr aufwendig sein einen Knopf an der richtigen Stelle hinzuzuf gen Funk tioniert eine Anh ufung grafischer Elemente nicht wie erwartet ist z B ein Label nicht sichtbar obwohl es da sein m sste ist es schwierig das Problem zu isolieren Beim Erzeugen der grafischen Elemente gibt es eine gro e Menge von Optionen die alle erst zur Laufzeit ausgewertet werden so dass sich dementsprechend Fehler nicht statisch finden lassen Es passiert schnell dass die Option zum Einschalten einzelner Eingabeevents falsch geschrieben wird und deswegen viele Events nicht auftreten Weiterhin muss dem Programmierer bewusst sein dass sich mit dem GS einfach Ober fl chen erstellen lassen diese aber noch keineswegs benutzerfreundlich sind So ist zum Beispiel ein Springen zwischen den einzelnen Elementen per Tastendruck ein erwartetes Standardverhalten jedesmal per Hand zu implementieren Eine GORN Applikation l sst sich nur zweimal aus der Gornbar starten Sobald ein drittes Fenster ge ffnet wird wird das Erste automatisch geschlossen Den Grund f r diese
52. n Geben Sie dann in dem Eingabefeld links oben den Usernamen des gew nschten Gespr chspartners ein und bet tigen den Connect Knopf Wenn Sie selber angetalkt werden erscheint ein kleines Fenster mit der Frage ob Sie ein Ge spr ch mit einer Person annehmen wollen Sie k nnen das durch einen der entsprechenden Kn pfe annehmen oder ablehnen Wenn Sie den Talk annehmen erscheint das gewohnte Talkfenster wel ches schlie lich jederzeit und wie gewohnt durch den Close Knopf beendet werden kann Beim Gespr chspartner verschwindet das Fenster dann ebenfalls sofort A 6 Admin Die Adminapplikation dient zum Verwalten der Nutzer in dieser Arbeitsgruppe Ein normaler Nutzer kann diese Applikation nur benutzen um seinen Realnamen oder sein Passwort zu ndern Dazu ist in der erscheinenden Liste der User der eigene Username zu w hlen und mittels des Edit Knopfes die entsprechende Bearbeitungsmaske zu ffnen Nachdem dort die nderungen vorgenommen wurden Achtung Das Passwort muss zweimal eingegeben werden um Irrt mer 34 auszuschlie en k nnen die nderungen durch den Save Knopf abgespeichert und aktiviert werden Wiederum dienen die Close Kn pfe zum vorzeitigen Beenden der verf gbaren Aktionen Spezielle privilegierte Benutzer k nnen User anlegen sowie alle User bearbeiten Zum Anlegen eines Users dient die Maske die sich hinter dem New Knopf der Adminapplikation verbirgt Nachdem alle Angaben g
53. n bet tigen Sie den Login Knopf und geben Ihren Usernamen und Ihr Passwort ein Nach dem Einloggen sehen Sie die dreigeteilte Gornbar Links sind untereinander alle Appli kationen aufgelistet die im GORN System verf gbar sind Rechts befindet sich eine Liste aller User in dieser Arbeitsgruppe Alle User die ein Sternchen vor dem Namen haben sind gerade eingeloggt und arbeiten mit GORN Alle User die einen Unterstrich vor dem Namen haben sind gerade eingeloggt haben sich aber als away gemeldet sind also gerade nicht direkt mit GORN besch ftigt Sie selber k nnen sich durch Druck auf den Away Knopf als abwesend kennzeichnen der dann verf gbare Back Knopf meldet Sie wieder zur ck Alle anderen User sind gerade nicht eingeloggt Im unteren Abschnitt der Gornbar befindet sich ein Textausgabefenster in dem wichtige Nach richten erscheinen Dort erscheint beispielsweise eine Ausgabe wenn Sie eine neue Email erhalten Mit dem Logout Knopf k nnen Sie sich aus dieser Arbeitsgruppe abmelden die Gornbar wird aber nicht beendet so dass Sie sich wieder einloggen k nnen A 3 Email Hinter dem Mail Knopf der Gornbar verbirgt sich ein kleines Emailsystem welches elektronische Nachrichten GORN intern mit Usern der Arbeitsgruppe austauschen kann Empf nger m ssen nicht eingeloggt sein Das Mail Center besteht aus einer Liste von Nachrichten die zum Lesen ausgew hlt wer den k nnen Eine ausgew hlte Nachrich
54. nerator aus drei Zahlen Seedwerten initialisiert wird und bei gleichen Seedwerten auch die gleichen Zahlenketten erzeugt Es ist also sehr wichtig immer wechselnde Seedwerte zu erzeugen Zus tzlich muss in jedem Prozess der Zufallsgenerator neu initialisiert werden da der Seed von ERLANG prozesslokal gehalten wird Ein klassischer Ansatz ist die aktuelle Zeit in den Seedwerten zu benutzen Die localtime Funktion liefert aber nur sekundengenaue Zeiten Werden viele Prozesse schnell hintereinander gestartet haben alle identische Seedwerte und damit auch die selben Zufallszahlen Dieses Problem trat beispielsweise bei den automatischen Pongspielern auf Das timer Modul von ERLANG bietet eine Funktion tc die eine Funktion ausf hrt und die verstrichene Zeit in Mikrosekunden zur ckliefert Zum Erzeugen einer der drei Seedwerte wird nun eine Funktion aufgerufen die zwei kurze wenige Millisekunden sleep Aufrufe absolviert Die Idee ist dass Zeitmessungen in diesem Bereich sehr ungenau sind gerade wenn durch viele neu gestartete Prozesse viele Taskwechsel auftreten Es hat sich gezeigt dass so Werte erzeugt werden k nnen die sich in den Prozessen unterscheiden F r die anderen beiden Seedwerte werden die Minuten und Sekunden der aktuellen Uhrzeit verwendet Die Funktion check _random_seed stellt sicher dass der Zufallszahlengenerator in jedem Prozess nur einmal initialisiert wird und tut dies auch wenn es n tig ist 27 4 Fazit 4 1 Die Pr
55. nicht alle verf gbaren Konfigurationsoptionen genannt sind m ssen einige direkt in den Quellen gesucht werden Weniger mit ERLANG als eher mit Gewohnheiten hat das funktionale Programmieren an sich zu tun Es ist im ersten Moment etwas gew hnunsbed rftig Schleifen wie z B die Eventbehandlung als tailrekursive Funktion zu formulieren Sp ter muss darauf geachtet werden die Tailrekursivit t nicht wieder zu zerst ren 4 2 Bewertung der Arbeitsergebnisse Obwohl GORN gut benutzbar ist w ren noch einige Funktionen zu verbessern und Unstimmig keiten zu beseitigen Einige der Probleme betreffen die grafische Oberfl che Listeneintr ge z B in der Benutzerliste der Gornbar bleiben nur so lange markiert bis die Liste neu aufgebaut wird Leider wird dies von Tk nicht automatisch behandelt sondern m sste in Handarbeit nachger stet werden Ebenfalls per Hand muss das Wechseln des Eingabefokus programmiert werden Das L schen von Benutzerdaten sollte mit einer R ckfrage abgesichert werden Der oben beschriebene Ping Pong Mechanismus ist nicht in allen Applikationen konsequent implementiert so dass die Spiele h ngen bleiben k nnen wenn eine Clientapplikation abst rzt ohne sich zuvor beim Spiel abzumelden Wir haben uns bem ht ein gewisses Ma an Sicherheit in das GORN System zu integrieren Dennoch ist das System nicht sicher Das liegt zum einen am Prinzip des Nachrichtenaustauschs in ERLANG aber auch an Implementierungsm ngeln
56. nkrecht auf die Strecke trifft genau auf der Strecke liegen bleibt oder schon auf der Strecke liegt Diese F lle werden in der Berechnung gesondert behandelt Ein weiterer Sonderfall tritt ein wenn der Ball genau den Schnittpunkt von zwei oder mehr Strecken trifft Dies wird explizit berpr ft und eine andere Methode zur Bestimmung des Aus fallswinkels benutzt Auch dort m ssen die F lle dass der Ball genau im Schnittpunkt zum Liegen kommt bzw dort schon liegt besonders behandelt werden Die Bewegung des Balls ist nur vollst ndig wenn in jedem Schritt die L nge des Bewegungsvek tors aufgebraucht wird Dazu wird obiger Algorithmus rekursiv immer wieder auf die Strecken der Welt angewendet Die Berechnungen sind dabei nicht auf Effizienz optimiert Viele Zwischen ergebnisse werden unn tig oft berechnet und nicht zwischengespeichert Abbildung 11 Konstruktion des Abprallens des Pongballs ohne Verwendung von Winkelfunktio nen Die Bezeichnungen entsprechen den Variablennamen in den Berechnungsfunktionen Um das Spiel etwas interessanter zu gestalten ist die wirkliche Form des Paddles etwas anders als die angezeigte Form W hrend eine einfache Strecke zu sehen ist werden in Wirklichkeit drei Strecken berechnet Die mittlere die wie das angezeigte Paddle liegt sowie links und rechts davon eine abgeschr gte Strecke Somit ndert sich der Ausfallswinkel auf dem Paddle je nachdem wo der Ball das Paddle trifft Im Originalpong v
57. nt auf die Bewegungsrichtung des Paddles anzugeben Der ganze Spielfluss ergibt sich aus dem Wechsel von tick und tack Nachrichten C gt PS pong tack Playernum Action Alle Clients antworten auf einen tick mit dieser Nachricht Action beschreibt was der Spieler mit seinem Paddle machen will left um es nach links zu bewegen right f r rechts und none um es nicht zu bewegen Der Server sammelt alle tack Nachrichten auf l sst die L nge eines Gameticks kann in der Konfiguration zwichen 10 und 100 Millisekunden gew hlt 23 werden verstreichen und berechnet dann den Spielschritt der mit der n chsten tick Welle abgeschlossen wird Wieviele Ticks pro Sekunde stattfinden ist Abw gungssache Je mehr es sind desto fl ssiger bewegt sich der Ball desto h her ist aber auch die Netzwerklast Sobald der Pongserver alle Spieler mittels der welcome Nachricht in das Spiel aufgenommen hat beginnt er mit der Serverloop Diese ist eine einfache tailrekursive Funktion die einen gro en receive Block enth lt Der Spielserver hat einen Zustand Das Spiel kann gerade im Gange sein also haupts chlich tick tack Nachrichten austauschen Zwischen den Runden passiert das aber nicht stattdessen wird ein Countdown durchgef hrt der allen Spielern erlaubt sich auf die neue Runde vorzubereiten Der Zustand des Spielservers gamestate Record enth lt aber keine expli zite Zustandsvariable Die Aktionen werden durch Nachrichten intern im Server koord
58. nts bei Verbindungsannahme zu erm glichen kann der Client in zwei Modi starten Wenn er normal also aus der Gornbar gestartet wird erfragt er bei der Gornbar die in der Userliste markierten Benutzer und verschickt eine Talkanfrage wenn exakt ein Benutzer markiert ist Im anderen Modus also wenn der Client vom Clientstatic gestartet wird bekommt er einen zus tzlichen Parameter bergeben der den Benutzernamen und die PID des Gegen bers enth lt 14 Talk 0 8 id Application e serverside Manager 8 request g start pasagas A A Atos O A E z er I 8 x i E g 1 D o S clientstatic A 8 e lt i 2 iar E O E 1 amp o i c ES client 1 client lt lt gt talk f v I i I Abbildung 6 Talk Applikation Nachrichten Referenz Talk CS S talk register Pid Cookie Username Ein Clientstatic registriert sich f r den Benutzer Username beim Server damit dieser Tal kanfragen weiterleiten kann CS S talk unregister Pid Cookie Username Entfernt den Clienstatic f r Pid aus der Liste des Talkservers C gt S talk request Username_dst Pid Cookie Username_src Ein Client Username_src m chte mit dem gegebenen User Username_dst talken Die Pid ist der Talkprozess Die Serverside berpr ft die Anfrage und leitet sie weiter S gt CS talk request Username_src Pid Der Server vermittelt eine Tal
59. ogrammiersprache ERLANG Die ERLANG Laufzeitumgebung ist sehr praktisch da Codeteile und Funktionen au erhalb ihres Einsatzgebietes getestet werden k nnen Dies ist sehr wichtig da das Typsystem keine berpr fun gen zur Kompilierzeit erm glicht Deswegen ist es von gro er Bedeutung alle Codeteile genau zu testen Dies ist nicht einfach da alle Zust nde der Applikation durchlaufen werden m ssen Das dynamische Typsystem zeigt sich auch an anderen Stellen als negativ Funktionen k nnen entweder mit einer import Direktive in den Namensraum eines Moduls importiert oder mit dem Modul namen voll qualifizert aufgerufen werden Bei beiden Methoden findet aber keine berpr fung der Existenz des Moduls oder der Funktion statt so dass sich schnell unbemerkt Fehler einschleichen Allerdings ist es dadurch m glich Modulnamen dynamisch zu erzeugen Der Kommunikationsmechanismus von Operator und receive Bl cken ist sehr sch n zu be nutzen und von gro er Klarheit Auch das Patternmatching ber Funktionsk pfe und empfangene Nachrichten ist sehr praktisch Es zeigt sich dabei dass oft Paare von Codestellen existieren in denen eine Nachricht erzeugt bzw verbraucht wird Wenn sich beim Programmieren hier ein klei ner Schreibfehler einschleicht artet die Suche danach schnell in ein aufwendiges Debugging aus Auch die Vollst ndigkeit und Konfliktfreiheit einer Funktionsimplementierung mit verschiedenen Pattern im Kopf kann nicht statisch gepr
60. rfahrungen mit der funktionalen Pro grammiersprache ERLANG darlegen sowie eine Bewertung des Projektergebnisses und des ERLANG Systems vornehmen Zus tzlich haben wir einzelne Komponenten bereits im Text bewertet Der Anhang umfasst Beschreibungen zur Installation und Benutzung des Systems Anhang A 2 Systemarchitektur Dieser Abschnitt umfasst eine Beschreibung der Systemarchitektur und eine pr zise Dokumenta tion der einzelnen Servermodule 2 1 Benutzermodell Eine Instanz des Gorn Systems stellt eine Arbeitsgruppe dar Dabei besteht eine Instanz aus einem Serverknoten auf dem die Serverprozesse laufen sowie beliebig vielen Clientrechnern die die Clientprozesse ausf hren In der Arbeitsgruppe werden eine Menge von Benutzern verwaltet die eindeutig ber ihren Benutzernamen identifiziert sind Jedem verbundenen Client sind alle Benutzer bekannt Benutzer k nnen privilegiert sein und somit mehr Rechte bei der Administration des Gesamtsystems haben Beispielsweise k nnen nur sie Benutzerkonten anlegen und l schen Die Informationen ber einen Benutzer bestehen aus einem privaten und einem ffentlichen Teil Der ffentliche Teil der Benutzerdaten kann von jedem Gruppenmitglied gelesen werden Der private Teil kann nur vom selben Benutzer und von privilegierten Benutzern gelesen und ver ndert werden Zum privaten Teil geh rt z B das Passwort Der ffentliche Teil umfasst den Benutzernamen den Realnamen und den aktuellen Zus
61. rn die maximale Anzahl der Spieler festlegen bestimmte Spieler von der Teilnahme ausschlie en und das Spiel starten Der Start Dialog In diesem Dialogfeld wartet der Spieler auf den Start des Spiels bzw kann noch aus dem Spiel aussteigen Der Start wird vom Initiator in dessen Create Dialog aus gel st Die Nachrichten des game Moduls Nachrichten Referenz Join Dialog C gt C game join_ack Gameserver Text Der Create Dialog Gameserver best tigt die Teilnahme an dem Spiel Der Join Dialog wird geschlossen und der Start Dialog mit Text angezeigt Der Text enth lt einen zweizeiligen String der die Konfiguration des Spiels in einer lesbaren Form enth lt Nachrichten Referenz Create Dialog C gt C game join_request Username Pid Der Join Dialog Pid mit Benutzer Username m chte am Spiel teilnehmen C gt C game left Username Pid Der Start Dialog Pid mit Benutzer Username ist aus dem Spiel ausgestiegen Nachrichten Referenz Start Dialog C gt C game start Server Der Create Dialog hat das Spiel gestartet der Server fiir dieses Spiel hat die PID Server C gt C game canceled Das Spiel wurde abgebrochen bevor es gestartet wurde C gt C game update_text Text Der Status des Spiels hat sich ge ndert der dargestellte Text soll auf Text ge ndert werden 18 3 6 3 GORnNtris GoRNtris ist ein Tetris mit Multiplayer Funktionalit t Ziel des Spieles ist nicht wie beim Einsp
62. rt Dies kann n tig sein da sich die Liste automatisch nur nach f nf Sekunden Verz gerung aktualisiert Sie k nnen hier ein neues Spiel er ffnen indem Sie den Create Knopf bet tigen Es folgt ein Konfigurationsdialog der f r jedes der Spiele spezifisch ist und weiter unten beschrieben wird Ist die Konfiguration abgeschlossen erscheint ein Fenster in dem Sie Ihr Spiel vor dem Start verwalten k nnen Zun chst kann die maximale Anzahl der m glichen Spieler ver ndert werden Dazu befindet sich links in dem Fenster ein vertikaler Schieberegler Ist diese Anzahl von Spielern erreicht k nnen keine weiteren Spieler mehr teilnehmen Rechts befindet sich eine gro e Liste in der die Usernamen der Spieler vermerkt sind die derzeitig an Ihrem Spiel teilhaben wollen Einzelne Spieler k nnen Sie mittels des Kick Knopfes auschlie en Die Konfiguration des Spieles kann hier noch ge ndert werden indem der Konfigurationsdialog durch den Configure Knopf aufgerufen wird Sobald Sie mit der Anzahl und Art der Mitspieler zufrieden sind k nnen Sie durch den START Knopf den Beginn das Spieles ausl sen Jetzt k nnen keine weiteren Spieler mehr hin zukommen A 7 1 Gorntris spielen Gorntris ist an das Gameboy M Tetris M angelehnt Von oben fallen langsam und schneller werdend Steine in das Spielfeld welche Sie mit den Pfeiltasten nach links und rechts bewegen k nnen Mit den Tasten a und s kann der aktuell
63. rten der Applikationen auf den Clientknoten Nachrichten Referenz Applicationmanager G AM gorn serverlist List Der GORN Prozess teilt dem Applicationmanager die Liste der gestarteten Server mit Diese wird sp ter beim Starten von Clients ben tigt Sie enth lt Zwei Tupel mit dem Servernamen und der PID C gt AM appman list Pid Der Client Pid fordert eine Liste von verf gbaren Applikationen an AM gt C appman list Applicationlist Der Applicationmanager teilt dem Client die verf gbaren Anwendungen mit Die Liste enth lt Tupel mit allen notwendigen Informationen um die Kn pfe anzuzeigen und die Applikationen zu starten C AM appman spawnstatics Client Cookie Username Wenn Username und Cookie korrekt sind werden auf dem Client alle verf gbaren Client statics gestartet Dies passiert beim Einloggen eines Benutzers auf der Gornbar AM gt C appman spawnstatics Statics Der Applicationmanager teilt dem Client die Liste der gestarteten Statics mit AM gt C appman spawnstatics error invalidcookie Der Client hat einen falschen Cookie bermittelt C gt AM appman start Client Cookie Username App Param Wenn Username und Cookie korrekt sind wird auf dem Client die Applikation App mit den zus tzlichen Parametern Param gestartet AM gt C appman start Pid Der Applicationmanager teilt dem Client die Pid des neuen Prozesses mit AM gt C appman start error
64. rungen der GORN Benutzer informiert zu werden Serversides werden automatisch registriert Je nach Applika tion wird diese Information dazu verwendet eine Mitteilung anzuzeigen oder bestimmte Aktionen auszuf hren Ein Beispiel hierf r ist die Gornbar die diese nderungen im Logfenster anzeigt Eine weitere Funktion die der Usermanager bernimmt betrifft den so genannten Watchdog mechanismus Dabei handelt es sich um ein Nachrichtenprotokoll das sicherstellt dass der Server und die Gornbar die Erreichbarkeit des jeweils anderen Prozesses pr fen k nnen Die Erreichbarkeit wird berpr ft indem der Usermanager in regelm igen Abst nden 4 Se kunden eine Nachricht an alle eingeloggten Gornbars schickt und nach jeweils 2 Sekunden pr ft welche Prozesse geantwortet haben Sollte ein Prozess nicht in der gegebenen Zeitspanne geantwor tet haben wird er automatisch ausgeloggt Den Gornbars dient dieser Mechanismus zum Testen ob der GORN Server noch erreichbar ist Sollte dieser f r 5 Sekunden keine Watchdog Nachricht schicken loggt sich die Gornbar automatisch aus um in einen definierten Zustand zu gelangen Nachrichten Referenz Usermanager GB gt UM fun login Pid Username Password Ein Benutzer will sich anmelden UM gt GB um welcome Cookie Diese Nachricht wird geschickt um der Gornbar eine g ltige Username Passwort Kombination anzuzeigen Der Cookie dient als Session Id die sowohl auf der Servernode als auc
65. s Problem konnten wir nicht abschlie end kl ren es liegt aber vermutlich an dem Mechanismus mit dem wir dynamisch Module nachladen ERLANG verwaltet zwei Versionen der geladenen Module old und new damit Funktionen die auf ein geladenes Modul zugreifen trotz des nachgeladenen Moduls weiterarbeiten k nnen F r GORN insbesondere f r die Spiele w re es nett gewesen wenn einfache Piept ne erzeugt werden k nnten Daf r ist in der Standardbibliothek nichts vorgesehen Die Syntax von ERLANG ist minimalistisch Obwohl sie logisch ist ergeben sich doch einige Kritikpunkte Zun chst sind die bedingten Ausdr cke syntaktisch zu kompliziert If else Kon strukte sehen ungewohnt aus da im else Teil h ufig eine Bedingung bzw ein Pattern wie true oder _ don t care vorkommt Der Verkettungsoperator der sowohl f r Listenkonstruktio nen als auch f r die Verkettung von Funktionsanwendungen benutzt wird unterst tzt kein leeres Element so dass das letzte Element nie von einem Komma gefolgt werden darf Dies ist zwar durchaus logisch stellt sich aber als prim re Fehlerquelle heraus wenn Teile einer Liste kurzzeitig auskommentiert werden beim neuen letzten Element muss das Komma entfernt werden oder eine Liste nachtr glich erweitert wird beim nun nicht mehr letzten Element muss ein Komma hinzugef gt werden hnlich verh lt es sich mit dem Verkettungsoperator f r Alternativen dem Semikolon Auch dieses muss immer beim le
66. s Spiels sind in einem einzigen Modul implementiert Die Rolle der spielspezifischen Server unterscheidet sich von Spiel zu Spiel Der Server kann zentral den Spielfortschritt berechnen und damit den Hauptteil der Arbeit bernehmen so dass die Clients lediglich der Ein Ausgabe dienen Es ist ebenfalls m glich dass die Clients ihren Spielverlauf autonom berechnen und der Server lediglich zur Synchronisation und Koordinierung benutzt wird Die serverzentrierten Spiele Pong und Tron verwenden zur Synchronisation des Spielverlaufs einen Gametick Mechanismus Dabei wird der Spielfortschritt in diskrete Zeitabschnitte unterteilt Beginn und Dauer eines Abschnitts wird vom Server vorgegeben 16 Spiele allgemein 3 2 gameserver L add remove change start m gt YN join_ack join_request left m 1 i start canceled update_text 8 T i 7 E client Keen spielspez server client a 3 play play start Abbildung 8 Allgemeines Kommunikationsschema der Spiele 3 6 1 Der Gameserver Der Gameserver ist die zentrale Instanz zur Verwaltung von Spielen Er h lt eine Liste von Spielen die auf Teilnehmer warten Zus tzlich stellt er sicher dass Clients authentifiziert sind da er die Liste der verf gbaren Spiele nur ausliefert wenn der Benutzer ordnungsgem angemeldet ist Die Aushandlung von Spieleparametern wird vom game Modul bernommen Abschnitt 3 6 2
67. strichen Die Anzahl aller Gameticks und der aktuelle Bonus werden bergeben um diese im Spielfenster anzuzeigen TC TS tron tack Username Action Dies ist die Anwort auf einen Gametick Sie gibt an welche Aktion der Benutzer in diesem Gametick durchgef hrt hat Dies kann eine Drehung nach links left nach rechts right oder keine Drehung sein none 25 TS TC tron players Players Der Zustand aller Spieler wird bermittelt um sie in das Spielfeld zu zeichnen Players ist eine Liste von player Records TS TC tron scorelist Players Der Zustand aller Spieler wird bermittelt um die Spieler und Punkteliste neu zu zeichnen Players ist eine Liste von player Records TS TC tron message Message Der Tronserver schickt den String Message den der Client anzeigen soll TS gt TC tron reset Eine Runde wurde beendet und der Client soll in den Zustand idle zur ckkehren Bewertung Der Tronclient hat zwar den Zugriff auf alle Spielerinformationen die auch der Server besitzt denn die komplette Spielerliste wird an den Client geschickt Dies geschieht aber nur der Einfachheit halber Der Client braucht nur die zur Darstellung wichtigen Informationen ber die Spieler also die Koordinaten Farben Punktzahlen und Namen der Spieler Leider wird das Spiel bei vielen Spielern einer gro en Rastergr e und l ngerer Spielzeit sehr langsam da die Kollisionserkennung immer aufwendiger wird je l
68. t kann beantwortet Reply Knopf weitergeleitet For ward Knopf oder als gel scht markiert werden Delete Knopf Der Expunge Knopf entfernt die als gel scht markierten Nachrichten tats chlich aus dem Mailsystem 33 Als gel scht markierte Nachrichten sind mit einem D markiert neue Nachrichten mit einem N Sobald eine Nachricht markiert wird z B um sie zu lesen verschwindet das N und ein Unterstrich wird angezeigt Zum Erstellen einer neuen Nachricht dient der Compose Knopf Das erscheinende Fenster ist identisch mit dem f r beantwortete oder weitergeleitete Nachrichten In die erste Zeile die mit To gekennzeichnet ist ist die Liste der Empf nger einzutragen Dies kann ein einzelner Username sein Vorsicht Kleinschreibung oder eine kommagetrennte Liste von Usernamen In der n chsten Zeile Subject wird ein kurzer Stichpunkt genannt um den es in der Nachricht gehen soll Dieser ist auch in der tabellarischen bersicht der Nachrichten zu sehen In das gro e Feld unten wird die eigentliche Nachricht eingetragen Dies sind beliebig viele Zeilen Text Zum Senden der Nachricht ist dann einfach der Send Knopf zu bet tigen Kann die Nachricht nicht zugestellt werden weil ein Empf nger nicht existiert erzeugt das Mailsystem eine Antwort die Ihnen das sofort mitteilt Alle Aktionen k nnen durch das Bet tigen des Close Knopfes abgebrochen werden A 4 Chat Mit
69. tand online offline away Offline sind alle Benutzer die zwar im System existieren aber nicht eingeloggt sind Online und away sind eingeloggte Benutzer wobei away ein spezieller Zustand ist mit dem signalisiert wird dass der Benutzer sich vor bergehend vom Arbeitsplatz entfernt hat Bewertung Sowohl ffentlicher als auch privater Teil der Benutzerinformationen sind erweiterbar Der ffentli che Teil k nnte beispielsweise noch organisationsinterne Adressen und Telefonnummern enthalten Der private Teil k nnte noch um vertrauliche Personaldaten wie Kontonummern erweitert werden Das zweistufige Benutzerkonzept ist sehr einfach und nur f r kleine Arbeitsgruppen geeignet In gr eren Organisationen w re eine ausgefeilte Rechteverwaltung n tig In solchen Organisationen w re es sinnvoll die Benutzerverwaltung an existierende Systeme anzubinden 2 2 Architektur GORN basiert auf einer Client Server Architektur deren Komponenten in Abbildung 1 dargestellt sind Es gibt einige Serverprozesse die auf einem zentralen Rechner laufen der allen Clients bekannt sein muss Diese Serverprozesse stellen verschiedene Dienste zur Verf gung Zum einen gibt es Server die der Benutzer Applikations und Datenbankverwaltung dienen zum anderen Gorn D Gorn Eu serverside S o E o 2 2 Usermanager UM Appmanager AM Gornbar GB clientstatic CS
70. tzten Element weggelassen werden Records sind eine von uns sehr viel genutzte M glichkeit dem dynamischen Typsystem schon 29 zur Kompilierzeit etwas mehr Strenge zu geben Beim Benutzen von Records kann wenigstens der Zugriff auf ein nicht existierendes Element statisch erkannt werden Viele Tippfehler lassen sich so fr h ausmerzen Allerdings ist die Syntax zum Zugriff auf einzelne Elemente des Records sehr umst ndlich da jedesmal der Recordtyp mit angegeben werden muss Werden Records ver schachtelt wird die Syntax noch komplizierter da der Zugriff auf das u ere Element geklammert werden muss All das ist durchaus logisch aber nicht praktisch Weiterhin unterst tzt ERLANG kleine lokalen rekursiven Funktionen Eine lokale Funktion die mittels eines Lambda Ausdrucks fun end definiert wurde kann sich selbst nicht aufrufen da der Funktionsname im Funktionsrumpf nicht bekannt ist Daher m ssen rekursive Hilfsfunktionen immer modulglobal definiert werden Noch zu erw hnen ist die Dokumentation des ERLANG Systems und der Standardbibliotheken Wir haben die HTML Version in der Entwicklung benutzt Leider ist diese nicht durchsuchbar so dass eine Stichwortsuche nicht m glich ist Die Funktionen sind innerhalb einer Moduldokumen tation nicht alphabetisch sortiert Weiterhin ist die Dokumentation nicht immer vollst ndig und an manchen Stellen sogar falsch Ein Studium der Quellen ist manchmal unumg nglich Da z B im GS
71. wird sollte die Sichtbarkeit ausgeschaltet werden um den Bildaufbau nicht zu verlangsamen Der Schieberegler Grid Size reguliert die Anzahl der Rasterlinien sowohl in waagerechter als auch senkrechter Richtung Der Regler Game Delay gibt an wie schnell das Spiel fortschreitet Der Wert sollte sich an der Geschwindigkeit des Netzwerkes und der Gr e des Rasters orientieren Ein gro es Raster sollte schneller gespielt werden A 8 About Box In der About Box haben sich die Programmierer des GORN Systems verewigt und als Fans der britischen Komiker Monty Python offenbart Durch Klicken in eine der Bilderreihen oder durch Bet tigen der Space Taste l sst sich die About Box wieder schlie en 37 Literatur 1 ERLANG Homepage http www erlang org 2 Die FAQs insbesondere wegen des Problems mit der Namensaufl sung http www erlang org faq ti html 3 ERLANG Dokumentation im Allgemeinen http www erlang org doc html 4 ERLANG Bibliotheksreferenz http www erlang org doc r7b doc applications html Diese Dokumentation gibt es auch zum kompletten Download zu jeder ERLANG Distribu tion 38
72. yernum Damit die anderen Spieler weiterspielen k nnen wird das Paddle des Spielers ber die ganze Breite der Homezone gezogen Der Pongserver terminiert wenn kein Spieler oder nur noch automatische Spieler vorhanden sind PS gt C pong goaway Der Server fordert die automatischen Spieler auf das Spiel zu verlassen und ihre Prozesse zu beenden Diese Nachricht wird nur an automatische Spieler gesendet PS gt C pong scores List Mit dieser Nachricht kann der Server den Punktestand oder auch die Spielerliste aktualisie ren Das Format von List ist wiederum eine Assoziativliste von Spielernamen und Punkte stand Konzeptionell kann diese Liste jederzeit aktualisiert werden praktisch passiert das aber immer zum Ende einer Runde oder wenn ein Spieler das Spiel verl sst PS gt C pong update Ballstate Paddles Der Server gibt ein Update der Elemente der Welt bekannt Ballstate und Paddles enthalten wiederum die Ballposition und die Strecken die die Paddles einnehmen wie bei der stuff Nachricht Diese Nachricht kann prinzipiell jederzeit auftreten wird aber nur benutzt um den finalen Zustand der Welt anzuzeigen wenn einer der Spieler den Ball fallenl sst da dies nicht durch den tick tack Mechanismus siehe unten erledigt werden kann PS gt C pong tick Ballstate Paddles Dies ist die Nachricht die das Spiel eigentlich vorantreibt Der Server gibt den aktuellen Zustand der Welt an wie oben und fordert den Clie

Download Pdf Manuals

image

Related Search

Related Contents

Lesson 78: Technical Specifications (20  水やりセット取扱説明書  Samsung DB-P70 User Manual  BIKREPAR 5000-300ER    ダウンロード(PDF 2.3MB)  Instruction manual (English)  Credential Cam User Manual  

Copyright © All rights reserved.
Failed to retrieve file