Codebase overview/de
From OpenSimulator
Contents |
Einführung
OpenSimulator ist ein großes und organisch gewachsenes Projekt, daher unterliegt seine Architektur immer noch Veränderungen. Daher gibt es sehr wenige formale interne Schnittstellen - Regionsmodule, die sich direkt an die Kerninterna anschließen.
Architektur
Dies ist ein sehr hochrangiges Diagramm der Hauptteile der Codeorganisation des Simulators. Pfeile zeigen die Richtung der Anfrageinitiierung an.
Ein Viewer (unten) interagiert mit dem Simulator, indem er Nachrichten sowohl über UDP als auch über HTTP sendet.
Regionen und Regionsmodule melden sich für UDP-Nachrichtenereignisse an (z. B. Benutzerbefehlseingaben wie Vorwärtsbewegung, Anforderungen zur Inventarmanipulation usw.). Diese Ereignisse werden aufgerufen, wenn der LLUDP-Client-Stack die entsprechenden Anfragen vom Viewer erhält. Die Regionen und Regionsmodule geben wiederum Nachrichten an den LLUDP-Clientstack zurück (z. B. Bewegungen von Avataren und Objekten), um sie an den Client zurückzusenden.
LL-Fähigkeiten sind ein ähnlicher Nachrichtenübermittlungsmechanismus, jedoch mit HTTP als Träger anstelle von UDP. Diese werden tendenziell für Nachrichten verwendet, die nicht zeitkritisch sind und werden häufig für das Verschieben großer Datenmengen in neueren Viewern verwendet (z. B. Texturen und Inventaranforderung und -lieferung, jedoch nicht andere Inventarbefehle wie das Verschieben von Gegenständen). Auch diese werden von Regionen und Regionsmodule gehandhabt.
Ein Simulator kann Nachrichten über die Event Queue-Fähigkeit an die Region zurückgeben, die im Wesentlichen eine Abfrage durch den Viewer an den Simulator ist, um Nachrichten abzurufen.
Regionen und Regionsmodule kommunizieren wiederum mit Backend-Grid-Services, um benötigte Daten abzurufen (z. B. Vermögenswerte), Inventar zu manipulieren, usw. Im Standalone-Modus von OpenSimulator befinden sich die Dienste im gleichen Prozess wie OpenSim.exe. Im Grid-Modus werden sie in einem separaten Robust.exe-Prozess gehostet.
Mehr exotische Konfigurationen von OpenSimulator würden dieses Diagramm komplizieren. Zum Beispiel ist es möglich, OpenSimulator so zu konfigurieren, dass Vermögenswerte direkt von in demselben Prozess implementierten Fähigkeiten abgerufen werden, anstatt durch den Simulator zu gehen.
Siehe auch: OpenSimulator Codebase Class Diagram
Pakete
- OpenSim. Dies enthält die Klassen, die den OpenSimulator-Regionsserver starten und die Konsole steuern.
- Startup
- Das Main() für OpenSim.exe befindet sich in der Datei OpenSim/Region/Application/Application.cs. Es führt eine Reihe von Konfigurationsprüfungen durch, aber der Kern davon ist die Instanziierung eines OpenSim-Objekts, das Aufrufen seiner Startup()-Methode (die die Dinge in separaten Threads ins Rollen bringt) und dann das Blockieren des initialen Threads durch Aufforderung auf der Hauptkonsole (unter Verwendung der Prompt()-Methode von MainConsole.Instance)
- OpenSim.OpenSim.Startup() stammt von einem Vorgänger, OpenSim.Framework.Servers.BaseOpenSimServer; es ruft StartupSpecific() auf.
- Startup
- OpenSim.Addons. OpenSimulator-Komponenten, die ursprünglich aus der Diva-Distribution stammen. Daher ihre unterschiedliche Organisation im Vergleich zu anderen Funktionen.
- OpenSim.Addons.Groups. Kernunterstützung für Benutzergruppen.
- OpenSim.Addons.OfflineIM. Kernunterstützung für Offline-IM.
- OpenSim.ApplicationPlugins. Jedes Paket ist ein individuelles Anwendungsplugin - ein Anwendungsplugin ist ein modulares Code-Stück, das einen Einfluss auf den gesamten Regionsserver hat. Siehe RegionModules für weitere Details oder einen der Blogposts von justincc für einen höheren Überblick (der wirklich in diesem Wiki sein sollte).
- OpenSim.Capabilities. Grundlegende Strukturen für die Unterstützung von Fähigkeiten.
- OpenSim.ConsoleClient. RestConsole zum Remote-Verbinden mit der OpenSimulator-Konsole. Noch nicht weit verbreitet - häufiger wird OpenSimulator in einer screen-Instanz unter Linux und in separaten Terminals unter Windows gestartet.
- OpenSim.Data. Dies ist der gesamte niedrigstufige Datenbankmanipulationscode. Hier finden Sie Pakete für SQLite, MySQL und MSSQL (der tendenziell hinterherhinkt).
- OpenSim.Framework. Allgemeiner Framework-Code, der vom Rest von OpenSimulator verwendet wird, der entweder nicht spezifisch für Regionen ist oder gemeinsam mit Regionen und anderen Klassen verwendet wird.
- OpenSim.Framework.AssetLoader.Filesystem. Kleine DLL, die dazu dient, Bibliotheksvermögenswerte vom Dateisystem zu laden.
- OpenSim.Framework.Configuration.HTTP. Alter Code zum Laden von Konfigurationen über HTTP. Kann über die Nützlichkeit hinaus verfallen sein.
- OpenSim.Framework.Configuration.XML. Code zum Laden von XML-Konfigurationsdateien (im Gegensatz zu INI). Kann über die Nützlichkeit hinaus verfallen sein.
- OpenSim.Framework.Console. Framework-Klassen für die OpenSimulator-Konsole.
- OpenSim.Framework.Monitoring. Statistiksammlung und Überwachungsinfrastruktur.
- OpenSim.Framework.RegionLoader.FileSystem. Code zum Laden der Regionkonfiguration aus dem Dateisystem (z. B. bin/Regions/Regions.ini).
- OpenSim.Framework.RegionLoader.Web. Code zum Remote-Laden der Regionkonfiguration.
- OpenSim.Framework.Serialization. Infrastruktur für OAR- und IAR-Lese- und Schreibvorgänge.
- OpenSim.Framework.Servers. Enthält generischen Servercode, wie den Basis-OpenSimulator-Server und HTTP-Server.
- OpenSim.Region. Enthält den Großteil des substantiellen Codes, der speziell mit Regionen/Szenen zu tun hat.
- OpenSim.Region.ClientStack. Geringfügige Infrastruktur für die Bereitstellung verschiedener UDP-Clientstacks (obwohl derzeit nur LLUDP existiert).
- OpenSim.Region.ClientStack.LindenCaps. Der für die Kommunikation mit Clients erforderliche Code für den HTTP- (Capability-) Teil des Second Life-Protokolls. Verknüpft Daten, die vom Client zu Regionenmodulen gehen, die bestimmte Aspekte behandeln.
- OpenSim.Region.ClientStack.LindenUDP. Der für die Kommunikation mit Clients erforderliche Code für den UDP-Teil des Second Life-Protokolls. Verknüpft Daten, die vom Client zu Szenen- und Regionsmodulcode gehen.
- OpenSim.Region.CoreModules. Die als Kern von OpenSimulator betrachteten Regionsmodule (und daher im Bundle enthalten). Dies umfasst eine große Bandbreite. Zum Beispiel behandelt das Avatar/Attachments/AttachmentsModule Avatar-Anhänge (obwohl mit vielen Strukturen immer noch im Kernregionscode). Das Framework/EntityTransfer/EntityTransferModule behandelt Regionübergänge und Teleports (wiederum in Zusammenarbeit mit großen Teilen des Kernregionscodes).
- OpenSim.Region.DataSnapshot. Code zum Erstellen einer XML-Datei, die den Inhalt der Region zusammenfasst. Kann einer externen Suchmaschine zugänglich gemacht werden.
- OpenSim.Region.Framework. Das Framework für die Region selbst, einschließlich Szenengraph, Szenenpräsenzklassen (Agenten), Szenenobjektklassen, Inventar usw. Könnte als das Herz des Simulators betrachtet werden.
- OpenSim.Region.OptionalModules. Optionale Regionenmodule, die nicht als Kern des Simulators betrachtet werden. Grundsätzlich könnten sie entfernt werden und dennoch einen funktionierenden Second Life-kompatiblen Simulator haben, obwohl dies nicht gut getestet wurde.
- OpenSim.Region.Physics. Allgemeiner Physik-Framework-Code und Plugins für spezifische Engines (BulletSim, ubODE, ODE usw.).
- OpenSim.Region.ScriptEngine. Code für Script-Engines, der die Skripte antreibt, die innerhalb von OpenSimulator ausgeführt werden. XEngine, YEngine
- OpenSim.Region.UserStatistics. Web-Statistikmodul zur Bereitstellung einiger Simulatorinformationen über eine Webseite.
- OpenSim.Server. Serverinfrastruktur.
- OpenSim.Server.Base. Gemeinsame Serverinfrastruktur für den Simulator und Robust-Grid-Server.
- OpenSim.Server.Handlers. Klassen zum Handhaben von Rohdateneingängen und Übersetzen dieser in Serviceanfragen. Wird hauptsächlich im Grid-Modus für ROBUST-Serverinstanzen verwendet. Zum Beispiel übersetzt Asset/AssetServerGetHandler interne Asset-Abrufanfragen in den Asset-Service und antwortet mit den Ergebnissen.
- OpenSim.Services. Code, der sowohl Serviceimplementierungen (z. B. AssetService zum Lesen und Schreiben von Vermögenswerten in persistente Speicher) als auch Infrastruktur bereitstellt (hauptsächlich OpenSim.Services.Connectors, die tatsächlich HTTP-Anfragen erstellen, um Dienste remote aufzurufen). Im Grid-Modus werden diese in Robust.exe-Instanzen instanziiert. Im Standalone-Modus werden diese direkt in OpenSim.exe instanziiert.
- OpenSim.Tests.*. Testcode, sowohl gemeinsame Infrastruktur, die in Regressionstests verwendet wird, als auch einige eigenständige Client-Testcodes. Tatsächliche Regressionstests sind im Code auf separate *.Test-Pakete verteilt (z. B. OpenSim.Region.Framework.Tests-Projekt).
- OpenSim.Tools. Einige mit OpenSimulator verbundene Werkzeuge. Wird nicht im eigentlichen Betrieb von OpenSimulator verwendet.
- pCampbot. Ein Testwerkzeug, das Bots verwendet, um die Aktivitätslast auf einem Simulator zu simulieren. Siehe pCampBot für weitere Details. Wird nicht im eigentlichen Betrieb von OpenSimulator verwendet.
Programmierbeschränkungen
Da OpenSimulator sowohl auf Windows als auch auf Mono (normalerweise auf Linux oder Mac) laufen muss, sind wir auf die Teile von .NET beschränkt, die die Mindestversion von Mono, die wir benötigen, unterstützt.