Inhaltsverzeichnis:

1    Einleitung
2    Die Architektur des VNet
2.1     Verbindungsaufbau des VNet-Client zum VNet-Server
2.2     Verbindungsaufbau des VNet-Server zum VNet-Client
3     Das VRML Interchange Protokoll
3.1     Kodierung der Basistypen

3.2     Kodierung des VRML Feld-Typs

3.3     Das Nachrichtenformat
3.3.1     Das Objekt
3.3.2     Das Feld
3.3.3     Der Wert
3.3.4     Von VNet reservierte Pseudo-Felder
3.4     Beispiel eines Nachrichtenaustausches
3.5     Geplante Weiterentwicklung des VI-Protokolls
4     Die Ereignisverteilung im VNet
5     Zukünftige Weiterentwicklung des VNet
6     Anhang
6.1 Literaturverzeichnis
6.2 Internet Ressourcen zu VNet und verwandten Themen
 
 
 

1    Einleitung

 
 

3    Das VRML Interchange Protokoll

 

Beispiel eines Nachrichtenaustausches

Objekt
Feld
Wert
Beschreibung
5
0
2.5 0 100.0
Verschiebe Objekt 5 an die Position (2.5, 0, 100.0).
5
-2
"Joe:hi"
(Client->Server) Chat- Nachricht von Objekt 5 (Benutzer Joe).
5
-2
"Joe:hi"
(Server->Client) die gleiche Nachricht als Broadcast vom Server.
5
-6
(none)
(Client->Server) Benutzer Joe möchte ein neues Objekt erzeugen.
15
-6
(none)
(Server->Client) Es wurde ein Objekt mit der Objekt-Id 15 erzeugt.
15
-3
"http://joe.com/dog.wrl"
(Client->Server) Füge Objekt mit angegebenem URL in Szene ein.
15
-3
"http://joe.com/dog.wrl"
(Server->Client) Füge Objekt mit angegebenem URL in Szene ein.
15
3
"Ralph"
(Client->Server) Ändere den Namen von Objekt 15 zu "Ralph".
15
3
"Ralph"
(Server->Client) Ändere den Namen von Objekt 15 zu "Ralph".
5
-1
(none)
Benutzer 5 möchte die Verbindung beenden.
 
 

3.5    Geplante Weiterentwicklung des VI-Protokolls

PROTO MYAVATAR [
field MFString behaviours [ "smile" "blink" "scream" ]
eventIn SFBool smile
eventIn SFBool blink
eventIn SFBool scream
] {
...
}
 
Der Client weist dann den einzelnen Verhaltensweisen eindeutige Feldidentifizierer zu. Um die neuen Ausdrucksmöglichkeiten des Avatars nutzen zu können, muß das VNet-Clientfenster um Schaltflächen erweitert werden, die der Benutzer betätigen kann um das entsprechende Verhalten bei seinem Avatar auszulösen. Wenn eine Schaltfläche von einem Benutzer gedrückt wird, so veranlaßt das den Client dazu eine einfache SFBool-Nachricht an den Server zu schicken. Daraufhin reicht der Server die Nachricht an die anderen angeschlossenen Clients weiter, die dann das entsprechende SFBool behaviour Feld des PROTO suchen und und das damit verknüpfte Verhalten ausführen so daß in jedem Client-Fenster die gewählte Animation des Avatars zu sehen ist.
Mit anderen VRML Datentypen, wie zum Beispiel dem SFVec3f oder dem MFString können sogar noch viel komplexere Interaktionen unterstützt werden. Die Objekte selbst können dann asynchrone Ereignisse erzeugen indem diese Felder in ähnlicher Weise in einem Prototypen aufgelistet werden. Das sieht dann ungefähr so aus:
 
PROTO MyButton [
field MFString eventIns [ "clicked" ]
field MFString eventOuts [ "clicked" ]
eventIn SFBool clicked
eventOut SFBool clicked
] {
...
}
 
Dies bewirkt, daß eventOut wie auch schon weiter oben automatisch ein eindeutiger Feldidentifizierer zugewiesen wird. Wenn ein Benutzer diese Schaltfläche anklickt, wird ein clicked Ereignis erzeugt und eine entsprechende Nachricht an den Server geschickt, der sie dann wieder an die Clients weiterreicht, um dort eine entsprechende Animation oder etwas anderes auszulösen.
 
 [Zurück zum Inhaltsverzeichnis]
 

4    Die Ereignisverteilung im VNet

Nachdem nun die Kodierung und das Nachrichtenformat des VI-Protokolls bekannt sind, soll hier erläutert werden wie die Ereignisverteilung im VNet realisiert ist. Wie schon in der Architektur des VNet beschrieben können nach dem Verbindungsaufbau zwischen VNet-Client und VNet-Server, die beiden Prozesse durch das VI-Protokoll miteinander kommunizieren. Hierzu müssen die Abläufe beim Verbindungsaufbau und danach, noch etwas genauer betrachtet werden. Wenn der VNet-Server eine Verbindung zu einem Client akzeptiert, so erzeugt er dafür unter anderem eine Datenstruktur in der, der Name des Benutzers, ein URL auf seinen Avatar und eine eindeutige Kennung ( vid ) abgelegt werden. Weiterhin wird für jeden VNet-Client ein eigener Thread erzeugt, der für die Kommunikation zuständig ist.
 
Wenn im VNet der Zustand erreicht ist, daß mehrere Clients mit dem Server verbunden sind, muß jede Interaktion zwischen VRML-Welt und Benutzer an die anderen Clients kommuniziert werden, so daß diese die Darstellung ihrer Welten entsprechend aktualisieren können. Diese Kommunikation erfolgt wie weiter oben beschrieben über sogenannte VIP-Nachrichten.
 
Wenn ein VNet-Client ein Ereignis (Bsp.: persönliche Nachricht, Positionsänderung des Avatars usw.) erzeugt, an dem ein oder mehrere andere angeschlossenen VNet-Clients interessiert sind, so schickt er es zunächst als VIP-Nachricht an den VNet-Server. Der VNet-Server entscheidet dann auf Grund des Typs der VIP-Nachricht welche anderen VNet-Clients über das Ereignis informiert werden müssen und gibt die VIP-Nachricht an die entsprechenden Threads weiter, die sie dann zum Versenden in den jeweiligen Ausgabestrom schreiben. Die Clients lesen diese Nachrichten ein und werten sie entsprechend aus (Bsp.: Aktualisieren die Darstellung der Welt, zeigen eine persönliche Nachricht an, usw.) Wie das im Einzelnen geschieht wird, am Beispiel einer Orientation -Nachricht beschrieben (siehe auch Abb. 3).
 
 
 
Eine Orientation-Nachricht wird von einem Client an alle anderen Clients geschickt, wenn sein Avatar aufgrund einer Benutzereingabe den Blickwinkel ändert. Das führt dazu, daß das VRML-Plugin des Browsers ein EventOut-Ereignis generiert. Dieses Ereignis liefert einen Vektor und einen Winkel als Wert ( SFRotation ) an die Clientschnittstelle ( EAISceneInterface ), wo es behandelt wird. Dieser Parameter wird von der Clientschnittstelle dazu verwendet ein SFRotation -Objekt zu erzeugen, das dann an den clientThread weitergereicht wird. Im clientThread wird eine Methode Namens send aufgerufen, der neben dem SFRotation -Objekt noch die vid (eindeutige Kennung des Clients) und ein Bezeichner ( ORIENTATION ), das den Typ der Nachricht bezeichnet als weitere Parameter mitgegeben werden. Aus den obigen Parametern wird ein Message -Objekt erzeugt und dem writerThread übergeben. Der writerThread ist die Instanz, in der tatsächlich auf das Übertragungsmedium geschrieben wird. Hierzu verwaltet der writerThread aus Effizienzgründen 2 Warteschlangen ( messages und transientMessages ). In die messages-Warteschlange kommen z.B. alle Nachrichten die ein Pseudofeld enthalten (Bsp.: PRIVAT-MESSAGE , CREATE-OBJECT , usw.) und werden sobald der writerThread bereit ist, aus der Warteschlange geholt und verschickt.
 
Bei der transientMessages-Warteschlange funktioniert es etwas anders. Hier werden alle anderen Nachrichten, das sind die, die sich ausschließlich auf Bewegungsdaten beziehen ca. 100ms zwischengespeichert und dann erst abgeschickt. Kommt jetzt eine Nachricht dieses Typs beim writerThread an, überprüft dieser ob schon eine Nachricht gleichen Typs in der Warteschlange steht. Ist dies der Fall dann ist diese automatisch veraltet, (da es sich ja um Bewegungsdaten des Avatars handelt) und kann direkt durch die neue ersetzt werden.
 
Sind die Nachrichten beim VNet-Server angekommen entscheidet dieser zunächst anhand des Nachrichtentyps ob die Nachricht an alle außer dem Sender (Bsp.: ORIENTATION -Nachricht) oder nur an einen einzelnen VNet-Client (Bsp.: PRIVATE_MESSAGE -Nachricht) gesendet werden muß. Danach geht die Nachricht an die entsprechenden Clients wo von einem Observerobjekt der Eingang einer Nachricht an die Dispatcherklasse gemeldet wird. Diese gibt die enthaltenen Daten entweder über die Clientschnittstelle an das VRML-Plugin zur Verarbeitung weiter oder zeigt z.B. eine Benutzernachricht auf dem Bildschirm an.
 
 [Zurück zum Inhaltsverzeichnis]
 

5    Zukünftige Weiterentwicklung des VNet

Stephen White beschreibt seine Ziele für die Zukunft des VNet als seine "grand vision" und teilt diese in vier Phasen ein.

Phase I:

Diese Phase entspricht dem Status quo und erlaubt Chat , die Benutzung von selbstprogrammierten Avataren und gemeinsames Begehen der Welt.

Phase II:

Die nächste geplante Erweiterung des VNet, soll es ermöglichen, daß die Benutzer selbständig die Welt um eigene Objekte erweitern können. Dies erfordert allerdings die Einführung einer Eigentümerschaft auf Objekte. Daneben muß auf der Clientseite eine Client-Schnittstelle entwickelt werden, die das Manipulieren und Einfügen von Objekten in die Welt ermöglicht. Schließlich benötigt der Server eine Datenbankanbindung um die neuen Objekte persistent abspeichern zu können.

Phase III:

In dieser Phase soll erweitertes Verhalten (z.B.Mimik) von Objekten und Avataren unterstützt werden. Dies ist möglich ohne das VI-Protokoll zu erweitern. Es ist eine Erweiterung dessen was bereits unter 3.5 Geplante Weiterentwicklung des VI-Protokolls beschrieben wurde.

Phase IV:

In der letzten Phase ist geplant, daß der VNet-Server die Synchronisation von Clients unterstützt. Das heißt wenn ein Client eine bestimmte, kritische Aktion auf einem Objekt in der VRML-Welt durchführt, wird dieses Objekt solange für die anderen Clients gesperrt bis die Aktion beendet ist. Als letztes soll die Möglichkeit bestehen, daß ein Benutzer Java-Code für ein Objekt an den Server schicken kann, wo es kompiliert wird und anschliesend zur Laufzeit in die Datenbasis geladen wird. Dafür müsste aber der Class loader modifiziert werden.

[Zurück zum Inhaltsverzeichnis]

6    Anhang

6.1    Literaturverzeichnis

 
[Bru98] Don Brutzman. The Virtual Reality Modelling Language and Java. In communications of the ACM, vol 41 no. 6, June 1998, pp. 57-64.
 
[VRML97] Internatinal Standard ISO/IEC 14772-1:, December 1997
 

6.2    Internet Ressourcen zu VNet und verwandten Themen

 
VRMLab Townsquare: Eine der ältesten VRML-Welten im Internet
Conference Area :  Experimentielle Multi-user domain
VNet :  VRML-Network
WebEarth:  VRML-Wetterkarte
The leper colony: Philosophisch, künstlerisch inspirierte Seite
Multiuser environment sketches:  Steht noch unter Bearbeitung
Cyber-JRC:  Projekt der Europäischen Kommission
The Digital Garden:  Diplomarbeit von Mirko Ross
Forest World:  Cyberspace von Niclas Olofsson
Electra City: Inselwelt von Miriam English
The Ancient Village Project: Projekt der German VRML User Group (GerVRML)
Browser Test World: VRML-Welt zum testen von Browser und Plug-in
[Zurück zum Inhaltsverzeichnis]