Hypergrid Implementation/de
From OpenSimulator
Contents |
Einführung
Diese Informationen sind veraltet
Siehe Hypergrid Glossar für ein sehr unvollständiges Glossar der Hypergrid-Begriffe.
Klassenübersicht
OpenSim.Region.CoreModules.Avatar
Klassenname | Schnittstellen | Beschreibung |
---|---|---|
Friends.HGFriendsModule | IFriendsModule, IFriendsSimConnector, ISharedRegionModule | Erweitert und ersetzt FriendsModule. Erreichbar über Scene.RequestModuleInterface<IFriendsModule>() und Scene.RequestModuleInterface<IFriendsSimConnector>(). Führt HG-spezifische Freundesfunktionen aus, wie das Weiterleiten von Freundesanfragen und das Zwischenspeichern. |
Friends.HGStatusNotifier | None | Hilft bei der Verwaltung von HG-Freundesstatusbenachrichtigungen. |
InstantMessage.HGMessageTransferModule | IInstantMessageSimConnector, IMessageTransferModule, ISharedRegionModule | Bearbeitet das Senden von Sofortnachrichten an externe Agenten. Ersetzt MessageTransferModule. |
Lure.HGLureModule | ISharedRegionModule | Bearbeitet das Senden von Teleportanfragen an externe Agenten. Ersetzt LureModule. |
OpenSim.Region.CoreModules.Framework
Klassenname | Schnittstellen | Beschreibung |
---|---|---|
EntityTransfer.HGEntityTransferModule | IEntityTransferModule, IUserAgentVerificationModule, INonSharedRegionModule | Erweitert und ersetzt EntityTransferModule. Abrufbar über Scene.RequestModuleInterface<IEntityTransferModule>() und Scene.RequestModuleInterface<IUserAgentVerificationModule>(). Führt Hypergrid-spezifische Operationen durch, wie das Übertragen von Assets von ausländischem zu lokalem Asset-Service für Avatar-Anhänge. |
InventoryAccess.HGInventoryAccessModule | IInventoryAcessmodule, INonSharedRegionModule | Unterklasse von InventoryAccessModule, die dies in der Hypergrid-Konfiguration ersetzt. Registriert sich bei der Szene, damit andere Module darauf zugreifen können, wenn sie scene.RequestModuleInterface<IInventoryAccessModule>() aufrufen. |
InventoryAccess.HGAssetMapper | None | Führt Asset-Operationen im Zusammenhang mit Inventaroperationen durch, wie das Abrufen und Einfügen aller Assets, die zum Rendern eines Objekts von einem ausländischen Asset-Service erforderlich sind, und das Einfügen in den lokalen Asset-Service. |
UserManagement.HGUserManagementModule | IUserManagement, ISharedRegionModule | Erweitert und ersetzt UserManagementModule. Registriert sich bei der Szene als IUserManagement. Führt HG-spezifische Operationen durch, um bekannte Benutzeridentifikatoren zu verwalten. |
OpenSim.Region.CoreModules.ServiceConnectorsOut
Klassenname | Schnittstellen | Beschreibung |
---|---|---|
Asset.HGAssetBroker. (in 0.9.2 entfernt) | IAssetService, ISharedRegionModule | Registriert als die Schnittstelle, die von Scene.RequestModuleInterface<IAssetService>() zurückgegeben wird. Entscheidet, ob Asset-Anfragen an Cache, lokale Speicherung oder ausländische Asset-Services weitergeleitet werden sollen, abhängig von der Asset-ID. Ausländische Asset-Service-Anfragen werden von HGAssetServiceConnector behandelt. Führt auch Sicherheitsprüfungen durch, z. B. ob bestimmte Assets auf ausländischen Grids importiert oder exportiert werden können. Assets, die von Remote-Asset-Services abgerufen werden, werden zum lokalen Asset-Service kopiert. In 0.9.2 wird dies durch RegionAssetConnector ersetzt, der alle Fälle behandelt, entsprechend ausgewählten Connectors und Asset-Anfragen |
Inventory.HGInventoryBroker | IInvenotryService, ISharedRegionModule | Registriert als die Schnittstelle, die von Scene.RequestModuleInterface<IInventoryService>() zurückgegeben wird. Entscheidet, ob eine Inventaranforderung lokal (im Fall eines lokalen Benutzers) oder an den Inventar-Service eines ausländischen Grids weitergeleitet werden muss. |
OpenSim.Server.Handlers.Hypergrid
Diese Klassen sind Klebstoffcode, der externe Nachrichten empfängt, um Hypergrid-Dienste aufzurufen.
Klassenname | Schnittstellen/Base-Klassen | Beschreibung |
---|---|---|
GatekeeperAgentHandler | AgentPostHandler | Leitet eingehende Agentenerstellungsauftrufe an den GatekeeperService weiter. |
GatekeeperServiceConnector | ServiceConnector | Empfängt eingehende Anrufe für den GatekeeperService. |
HeloServerConnector | ServiceConnector | TODO |
HGFriendsServerConnector | ServiceConnector | Instanziiert HGFriendsServerPostHandler. |
HGFriendsServerPostHandler | BaseStreamHandler | Empfängt eingehende HG-Freunde-Aufrufe und löst die entsprechende HGFriendsService-Methode aus. |
HomeAgentHandler | AgentPostHandler | TODO |
HypergridHandlers | - | Bietet Handler für GatekeeperServiceConnector. |
InstantMessageServerConnector | ServiceConnector | Empfängt eingehende Sofortnachrichten über das Hypergrid und leitet sie an den IM-Service weiter. |
UserAgentServerConnector | ServiceConnector | Leitet eingehende Benutzer-Agentenanforderungen an den UserAgent-Service weiter. |
OpenSim.Services.Connectors
Klassenname | Schnittstellen | Beschreibung |
---|---|---|
Asset.HGAssetServiceConnector | IAssetService | Intern von HGAssetBroker instanziiert, um Anfragen zu bearbeiten, die an ausländische Asset-Services weitergeleitet werden müssen. |
Hypergrid.GatekeeperServiceConnector | ISimulationService | Connector zu einem ausländischen Gatekeeper-Dienst. |
Hypergrid.HeloServicesConnector | None | Connector zu einem ausländischen Helo-Dienst. |
Hypergrid.HGFriendsServicesConnector | None | Connector zu einem ausländischen Freunde-Dienst. |
Hypergrid.UserAgentServiceConnector | ISimulationService, IUserAgentService | Connector zu einem ausländischen Benutzer-Agenten-Dienst. |
OpenSim.Services.HypergridService
Klassenname | Schnittstellen | Beschreibung |
---|---|---|
GatekeeperService | IGatekeeperService | Führt Gatekeeper-Operationen für das Grid durch. Siehe Hypergrid-Protokoll für weitere Details. |
HGAssetService | IAssetService | Bietet den Asset-Service, auf den ausländische Grids zugreifen. |
HGFriendsService | IHGFriendsService | Bietet den Freunde-Service, auf den ausländische Grids zugreifen. |
HGInstantMessageService | IInstantMessage | Bietet den Sofortnachrichten-Service, auf den ausländische Grids zugreifen. |
HGInventoryService | IInventoryService, XInventoryService | Bietet den Inventar-Service, auf den ausländische Grids zugreifen. Wahrscheinlich für ältere Versionen von Hypergrid und durch HGSuitcaseInventoryService ersetzt. |
HGSuitcaseInventoryService | IInventoryService, XInventoryService | Bietet den Inventar-Service, auf den ausländische Grids zugreifen. Verwendet das 'Koffer'-Konzept (mit passendem Benutzer-Inventarordner), um den Zugriff zu steuern. |
UserAccountCache | IUserAccountService | Scheint derzeit nicht verwendet zu werden. |
UserAgentService | IUserAgentService | Bietet den Benutzer-Agenten-Service, auf den ausländische Grids zugreifen. Siehe Hypergrid-Protokoll für weitere Details. |
Hyperlinks und Agentenübertragungen
Wenn Sie eine Verbindung zwischen Ihrem Opensim und einem anderen herstellen, wird eine Nachricht an dieses andere Opensim gesendet, in der Informationen dazu angefordert werden. Diese Informationen umfassen die Netzwerkinformationen dieses Opensim-Hosts und die Koordinaten seiner ersten Region auf seiner lokalen Karte in Form eines Region-Handles. Angenommen, Sie verbinden den Knoten X.com:9000 und platzieren ihn auf Ihrer lokalen Karte bei 900, 900. Dieses Opensim führt wahrscheinlich eine oder mehrere Regionen aus, die wahrscheinlich nicht bei 900, 900 auf ihrer eigenen Karte liegen. Angenommen, die erste Region dieses Opensim befindet sich bei 1100, 1100. Aus Ihrer Sicht spielt es keine Rolle, welche diese anderen Koordinaten sind, und Sie müssen es nicht wissen - das ist der Schlüssel zur Dezentralisierung der "Welt", wie sie von einer 2D-Karte gegeben wird. Sie möchten es auf Ihrer Karte bei 900, 900 platzieren. Die "wahre" Position dieses Simulators ist nur für den LL-Viewer wichtig, wenn es Teleporte zwischen Ihrer Welt und diesem anderen Opensim gibt. Diese Zuordnung zwischen Koordinatensystemen ist das Wesen von Hyperlinks für Opensim; es ist eine einfache, aber entscheidende Sache, die die Hypergrid-Implementierung macht. Die Zuordnung erfolgt bei Ereignissen wie TeleportFinish; anstelle der lokalen Koordinaten sendet der Hypergrid-Teleport-Wrapper die entfernten Koordinaten an den Viewer.
Wenn ein Agent durch diesen Hyperlink teleportiert, passiert Folgendes. Zuerst, bevor InformRegionOfChildAgent, informiert das lokale Opensim das entfernte Opensim über diesen ausländischen Benutzer über die Methode "expect_hg_user". Diese Nachricht sendet die Adressen aller Server mit, die dieser Benutzer verwendet, d. h. Benutzer-, Inventar- und Asset-Server. Das entfernte Opensim erstellt einen Eintrag für diesen Benutzer in seinem lokalen Benutzerprofilcache, aber nicht in seiner Benutzerdatenbank; die Informationen zum ausländischen Benutzer sind nicht persistent. Danach ist der Teleportationsprozess genau derselbe wie der normale Teleportationsprozess; der einzige Unterschied besteht darin, dass die Region-Handles zwischen der Hyperlink-Position der entfernten Region auf der lokalen Karte und ihrer tatsächlichen Position auf ihrer Karte getauscht werden.
Zusammenfassend sind die beiden neuen Konzepte, die durch die Hypergrid eingeführt wurden, das Konzept eines Hyperlinks und das Konzept eines "lokalen Benutzers" vs. "ausländischer Benutzer".
Inventarzugriff
Der Zugriff auf das Inventar von einem ausländischen Grid erfolgt durch das Umhüllen der bestehenden Szene-Inventarinteraktionen mit zusätzlichem Code, der Inventarassets von/zu dem Asset-Server des Benutzers abruft oder sendet. Wenn auf das Inventar zugegriffen wird, überprüft der Hypergrid-Wrapper, ob der Benutzer ausländisch ist, und wenn dies der Fall ist, fordert der Wrapper die erforderlichen Assets vom Asset-Server des Benutzers an. Wie bei jedem abgerufenen Asset können diese vom ausländischen Simulator zwischengespeichert werden. Von da an übergibt der Wrapper die Kontrolle an die bestehenden Inventarzugriffsfunktionen.
Wenn etwas dem Inventar hinzugefügt wird, wird der Hypergrid-Wrapper über ein Ereignis benachrichtigt und sendet die Assets an den Asset-Server des Benutzers. Ein Cache der ausgetauschten Item-Identifikatoren wird beibehalten, damit sie nicht ständig neu abgerufen werden.
Das Ergebnis ist, dass hypergrid-fähige Opensim-Instanzen mit mehreren Asset-Servern interagieren, anstatt nur einem. Diese Interaktion wird implementiert, indem für jedes ausländische Grid ein GridAssetClient-Objekt instanziiert wird, anstatt nur dasjenige, das in nicht-hypergrid-fähigen OpenSimulator-Installationen verwendet wird.
Assetzugriff
In Version 0.9.2 wurden die Regionsmodule LocalAssetServiceConnector, RemoteAssetServiceConnector und HGAssetBroker durch ein einzelnes Modul RegionAssetConnector ersetzt.
(LocalAssetServiceConnector ist derzeit noch vorhanden, wird jedoch nur in einigen Tests verwendet und wird mit der Zeit geändert)
Diese Änderung macht den Code lesbarer mit saubereren Code- und Datenpfaden.
Das Verhalten je nach Simulationstyp hängt von der Auswahl der unteren Verbindungsstellen ab, die in Abschnitt [AssetService]
der Ini-Datei des jeweiligen Regionstyps konfiguriert sind (Standalone, Grid, mit oder ohne HG-Region).
LocalGridAssetService definiert den unteren Zugriff auf den Speicher, entweder direkt auf den Grid-Asset-Service im Fall von Standalone oder über einen Connector in einem Grid-Fall. HypergridAssetService ermöglicht HG-Speicher und definiert den Connector dafür, d. h. HGAssetServiceConnector in normaler Konfiguration.
Ältere Versionen:
In einer normalen, nicht hypergrid-fähigen OpenSimulator-Installation wird entweder
- der LocalAssetServiceConnector (für Standalone) durch die Angabe in der [Modules]-Sektion von bin/config-include/Standalone.ini
- oder der RemoteAssetServiceConnector (für Grid) durch die Angabe in der [Modules]-Sektion von bin/config-include/Grid.ini
bei der Szene registriert (über Scene.RegisterModuleInterface()). Beide diese Schnittstellen implementieren IAssetService. Andere Module rufen dies dann über den Aufruf Scene.RequestModuleInterface<IAssetService>() ab.
Unter einer Hypergrid-Konfiguration wird stattdessen HGAssetBroker bei der Szene registriert. Diese IAssetService-Implementierung enthält Logik, um herauszufinden, ob ein angefordertes Asset aus dem Cache bedient werden kann, ein lokal gehostetes Asset ist oder von einem entfernten Grid abgerufen werden muss, usw. Ähnliche Logik ist für andere IAssetService-Methoden vorhanden (z.B. store).
Anfragen, die an ausländische Asset-Services weitergeleitet werden müssen, werden dann an eine interne Instanz von HGAssetServiceConnector weitergeleitet.
HGAssetBroker enthält auch Code, um herauszufinden, ob bestimmte Sicherheitskonfigurationen verhindern sollten, dass bestimmte Assets importiert oder exportiert werden.
Freunde
Bitte siehe Hypergrid Friends.