OpenSim.Region.DataSnapshot/fr
From OpenSimulator
Languages: |
English Français |
The only data that is being exposed at this point is region info and parcel data for parcels marked "Show in search".
Le module DataSnapshot est un IRegionModule qui utilise les données de diverses parties de la scène OpenSimulator et produit un fichier au format spécifique XML . À partir de ce fichier, vous pouvez créer des services Web à avec les données de sortie. Il est comparable à une "API de recherche", bien qu'il ne soit pas limité à la simple recherche. Ce projet a vu le jour après une discussion sur la liste de diffusion il y a plusieurs mois (2008) à propos de la recherche, lorsque Diva m'a contacté et m'a fait part de ses idées. Pendant environ un mois, nous avons travaillé de façon intermittente sur ce module de démonstration. J'appelle cela une démonstration du concept pour l'instant.
Les seules données qui affichées à ce stade sont les informations de la région et les données des parcelles définies à "Afficher dans la recherche".
Fonctionnement du module
Le module est mis en œuvre comme tout autre module de région. La classe du module IRegionModule est DataSnapshotManager.
DataSnapshotManager
Il s'agit de la classe "principale" du module - elle gère l'enregistrement des objets IDataSnapshotProvider, crée DataRequestHandler et contient des fonctions pour générer des snapshots. Fonctions notables :
- Initialise - Récupérée dans IRegionModule. Vérifie si la configuration est chargée et ajoute chaque scène en cours de simulation à sa liste interne de régions à explorer pour les données.
- PostInitialise - La deuxième fonction la plus importante. Elle enregistre le callback du timer et recherche les objets IDataSnapshotProvider dans l'Assembly qu'elle contient. Elle crée un IDataSnapshotProvider pour chaque combinaison Scène et IDataSnapshotProvider. Lorsque le format et l'interface se stabilisent, nous pouvons alors laisser le programme commencer à rechercher des IDataSnapshotProvider dans d'autres Assemblies. Ensuite, il crée l'objet DataRequestHandler et lui transmet la première scène. Enfin, il vérifie s'il a besoin d'envoyer un ping à un serveur externe (comme déterminé par la configuration).
- Snapshot (private) - Extrait un XmlDocument d'une scène. Chaque XmlDocument peut être envoyé directement en réponse à une requête de données, mais GetSnapshot peut également les fusionner en une seule réponse pour chaque scène simulée par l'hôte.
- GetSnapshot - Appelé depuis DataSnapshotManager. Devrait vraiment faire partie de DataRequestHandler.
- MakeRegionNode - Crée une partie du XML dans le fichier, devrait être dans un IDataSnapshotProvider mais actuellement la façon dont le résultat est intégré au fichier ne correspond pas bien à l'interface. Il faudrait peut-être retravailler le format plus tard ou quelque chose comme ça.
- NotifyDataServices - Responsable du ping sur un serveur externe défini dans nos options de configuration.
- SnapshotTimerCallback - Remarquable pour son inutilité. Tout ce qu'il fait est d'appeler MakeNewSnapshot. Si vous voulez que quelque chose d'autre se produise lorsque le timer du snapshot est écoulé, ajoutez-le ici. J'aurais vraiment dû ajouter MakeNewSnapshot directement au timer.
- GetErrorMessage - Crée une erreur pour GetSnapshot en cas d'exception (fichier manquant, etc).
- GetGridSnapshotData - Prend les paires clé-valeur de GridData et les transforme en XML, rempli lors du premier appel d'Initialise.
- GetRegionCategory - Fonction d'aide, intéressante seulement parce qu'à l'origine, lorsque la scène n'avait pas de flag Mature ou PG, elle retournait "PN Testing Sandbox", c'est à dire le paradis des râleurs. Maintenant, elle renvoie un "Unknown" complètement barbant, d'où le commentaire.
...Je pense que c'est tout ce qui mérite d'être mentionné.
DataRequestHandler
Une toute petite classe qui répond aux requêtes concernant les données..... Tout ce qu'elle fait est d'enregistrer un callback à Scene.AddHTTPHandler - une fonction que nous avons ajoutée à Scene juste pour ce module. Oui, vous pouvez enregistrer des gestionnaires de BaseHTTPServer à partir d'un RegionModule maintenant.
Cela mériterait vraiment de disposer d'une fonction GetSnapshot au lieu de DataSnapshotManager.
IDataSnapshotProvider
Vous la trouverez dans le dossier des interfaces. Cette jolie petite classe fournit la plupart des données pour notre module. L'interface exposée est comparable à IRegionModule, et est chargée de la même manière, sauf que nous ne chargeons actuellement qu'à partir du même Assembly.
public interface IDataSnapshotHandler { XmlNode RequestSnapshotData (XmlDocument document); void Initialize (Scene scene, DataSnapshotManager parent); Scene GetParentScene { get; } }
- Initialize - Vous donne une scène et un objet parent. Vous pouvez également établir quelques callbacks si vous le souhaitez.
- RequestSnapshotData - Donne un XmlDocument à utiliser comme une fabrique de noeuds. Ici, retourne un XmlNode, créé à partir de la fabrique. (Sinon, des exceptions seront générées)
- GetParentScene - Retourne la scène parent ici.
Format XML
Écrire ceci plus tard ( cela devrait être évident au regard du code)
Options de configuration
Vous devez avoir une section [DataSnapshot] dans votre configuration OpenSim.ini et index_sims défini à true avant que DataSnapshot ne puisse faire quoi que ce soit. Autres options intéressantes :
- snapshot_cache_directory - Dossier dans lequel sont enregistrés les instantanés. La valeur par défaut est "DataSnapshot".
- data_services - Serveur(s) auquel(s) envoyer un ping pour avertir des snapshots.
- disable_modules - Option pour désactiver un module par nom. Ne fonctionne pas encore réellement.
À faire
- Données Snapshot fournies par le script. Il faudrait ajouter une fonction aux commandes communes construites _OU_ retravailler le moteur de script pour permettre aux RegionModules d'enregistrer leurs propres fonctions dans les ScriptEngines. La première est facile mais fausse, la seconde est correcte mais difficile.
- Test de régression avec le travail de 3Di OpenSim Load Balancing and Region Splitting. Théoriquement, cela ne devrait pas créer de problèmes puisque nous ne faisons pas de données permanentes qui doivent être transférées avec un simulateur. PEUT-ÊTRE l'option des services de données, puisque ce serait probablement le choix du propriétaire de la région et devrait fluctuer avec la région.
- Faire fonctionner disable_modules
- Etc
Services qui utilisent ces données
Si votre simulateur est connecté à l'Internet public et que vous avez activé le module DataSnapshot, les données exposées par ce dernier sont mises à la disposition de toute personne qui en fait la demande via http://<votre adresse IP>:<port>/?method=collector. Tout le monde peut développer des services de données basés sur ces données publiques.
Pour l'instant, il existe un service de recherche tiers fourni par Metaverse Ink qui utilise ces données. Pour effectuer des recherches dans ces opensims, rendez-vous sur http://metaverseink.com. Pour l'instant, ce service n'est qu'une démonstration du concept permettant de faire le lien entre l'exposition des données et leur utilisation.