Codebase overview/fr

= Introduction = OpenSimulator est un projet de grande envergure et à croissance organique, son architecture est donc toujours sujette à des changements. En tant que tel, il y a très peu d'interfaces internes formelles - modules de région fonctionnant en se branchant directement sur les éléments internes du noyau.

= Architecture =



Il s'agit d'un diagramme de très haut niveau des principaux blocs de l'organisation du code du simulateur. Les flèches indiquent la direction de l'initiation de la requête.

Un viewer (en bas) interagit avec le simulateur en envoyant des messages via UDP et HTTP.

Les régions et les modules de région s'enregistrent pour les événements de messages UDP (par exemple, les entrées de commande de l'utilisateur telles que le déplacement vers l'avant, les demandes de manipulation d'inventaire, etc.)  Ces événements sont invoqués lorsque la pile client LLUDP reçoit les demandes correspondantes du viewer. À leur tour, les régions et les modules de région renvoient des messages à la pile client LLUDP (par exemple, les mouvements des avatars et des objets) pour qu'ils soient renvoyés au client.

Les capacités LL sont un mécanisme de transmission de messages similaire, mais avec HTTP comme support plutôt qu'UDP. Elles ont tendance à être utilisées pour les messages qui ne sont pas critiques en termes de temps et sont souvent utilisées pour déplacer de grandes quantités de données dans les nouveaux viewers (par exemple, la demande et la livraison de texture et d'inventaire, mais pas les autres commandes d'inventaire telles que le déplacement d'objet). Encore une fois, ceux-ci sont gérés par les régions et les modules de région.

Un simulateur peut renvoyer des messages à la région par le biais de la capacité de file d'attente d'événements, qui est essentiellement une interrogation du simulateur par le viewer pour récupérer des messages.

Les régions et les modules de région communiqueront à leur tour avec les services de grille backend pour récupérer les données requises (par exemple, les assets), manipuler l'inventaire, etc. En mode autonome d'OpenSimulator, les services seront dans le même processus qu'OpenSim.exe. En mode grille, ils seront hébergés dans un processus Robust.exe distinct.

Des configurations plus exotiques d'OpenSimulator compliqueraient ce diagramme. Par exemple, il est possible de configurer OpenSimulator pour qu'il récupère les ressources directement à partir des capacités implémentées dans le même processus que le service de grille plutôt que de passer par le simulateur.

Voir aussi : OpenSimulator Codebase Class Diagram

= Packages =
 * OpenSim. Contient les classes qui lancent le serveur de région OpenSimulator et gèrent la console
 * Startup
 * Main de OpenSim.exe se trouve dans le fichier OpenSim/Region/Application/Application.cs. Il effectue un certain nombre de vérifications de configuration, mais l'essentiel est l'instanciation d'un objet OpenSim, l'appel de sa méthode Startup (qui fait tourner les choses dans des threads séparés), puis le blocage du thread initial par une invite sur la console principale (en utilisant la méthode Prompt MainConsole.Instance).
 * OpenSim.OpenSim.Startup provient d'un ancêtre, OpenSim.Framework.Servers.BaseOpenSimServer ; il appelle StartupSpecific


 * OpenSim.Addons. Les composants d'OpenSimulator qui proviennent à l'origine de la distribution Diva.  D'où leur organisation différente par rapport aux autres fonctionnalités.
 * OpenSim.Addons.Groups. Le support de base pour les groupes d'utilisateurs.
 * OpenSim.Addons.OfflineIM. Le support de base pour la messagerie instantanée hors ligne.
 * OpenSim.ApplicationPlugins. Chaque package est un plugin d'application individuel - un plugin d'application est un morceau de code modulaire qui a un effet sur l'ensemble du serveur de région. Voir RegionModules pour plus de détails ou un des justincc's blogposts pour une vue d'ensemble de plus haut niveau (qui devrait vraiment être dans ce wiki).
 * OpenSim. Capabilities. Structures de base pour le support des capacités.
 * OpenSim.ConsoleClient. RestConsole pour se connecter à distance à la console d'OpenSimulator.  Peu utilisé jusqu'à présent - plus communément, OpenSimulator est lancé dans une instance screen sous Linux et dans des terminaux séparés sous Windows.
 * OpenSim.Data. Il s'agit de toutes les manipulations de base de données de bas niveau. Ici, vous verrez des paquets pour SQLite, MySQL et MSSQL (qui a tendance à être en retard).
 * OpenSim.Framework. Le code général utilisé par le reste d'OpenSimulator qui n'est pas spécifique aux régions ou utilisé en commun avec les régions et les autres classes.
 * OpenSim.Framework.AssetLoader.Filesystem. Petite DLL utilisée pour charger les ressources de la bibliothèque depuis le système de fichiers.
 * OpenSim.Framework.Configuration.HTTP. Ancien code pour charger la configuration via HTTP.  Peut avoir perdu son utilité.
 * OpenSim.Framework.Configuration.XML. Code pour charger des fichiers de configuration XML (par opposition à INI).  Peut s'être dégradé au-delà de son utilité.
 * OpenSim.Framework.Console. Les classes de Framework pour la console d'OpenSimulator.
 * OpenSim.Framework.Monitoring. Infrastructure de collecte de statistiques et de surveillance.
 * OpenSim.Framework.RegionLoader.FileSystem. Code pour charger la configuration des régions à partir du système de fichiers (par exemple bin/Regions/Regions.ini).
 * OpenSim.Framework.RegionLoader.Web. Code pour charger la configuration des régions à distance.
 * OpenSim.Framework.Serialization. Infrastructure pour la lecture et l'écriture OAR et IAR.
 * OpenSim.Framework.Servers. Contient du code serveur générique, tel que le serveur de base d'OpenSimulator et les serveurs http.
 * OpenSim.Region. Contient la plupart du code important qui concerne spécifiquement les régions/scènes.
 * OpenSim.Region.ClientStack. Une petite quantité d'infrastructure pour rendre disponible différentes piles de clients UDP (bien qu'actuellement seul LLUDP existe).
 * OpenSim.Region.ClientStack.LindenCaps. Le code nécessaire pour communiquer avec les clients utilisant la partie HTTP (capacité) du protocole Second Life.  Colle les données allant vers/venant du client aux modules de la région qui gèrent des aspects spécifiques.
 * OpenSim.Region.ClientStack.LindenUDP. Le code nécessaire pour communiquer avec les clients utilisant la partie UDP du protocole Second Life.  Colle les données allant vers/venant du client au code du module de scène et de région.
 * OpenSim.Region.CoreModules. Les modules de région considérés comme essentiels à OpenSimulator (et donc fournis avec lui).  Cela couvre un large éventail.  Par exemple, le module Avatar/Attachments/AttachmentsModule gère les pièces jointes des avatars (bien que de nombreuses structures soient encore dans le code de la région centrale).  Le Framework/EntityTransfer/EntityTransferModule gère les traversées de régions et les téléports (bien qu'encore une fois en coopération avec de grandes parties du code principal de région).
 * OpenSim.Region.DataSnapshot. Code pour créer un fichier XML qui résume le contenu de la région.  Il pourrait être exposé à un moteur de recherche externe.
 * OpenSim.Region.Framework. Le cadre pour la région elle-même, y compris le graphe de la scène, les classes de présence de la scène (utilisateur), les classes d'objets de la scène, l'inventaire, etc.  Peut être considéré comme le noyau du simulateur.
 * OpenSim.Region.OptionalModules. Modules de région facultatifs qui ne sont pas considérés comme essentiels pour le simulateur.  En principe, ils peuvent être supprimés tout en ayant un simulateur compatible avec Second Life, bien que cela n'ait pas été testé.
 * OpenSim.Region.Physics. Code général du cadre physique et plugins pour des moteurs spécifiques (BulletSim, ubODE, ODE, etc).
 * OpenSim.Region.ScriptEngine. Le code des moteurs de script qui alimente les scripts exécutés dans OpenSimulator. XEngine, YEngine.
 * OpenSim.Region.UserStatistics. Web Statistics Module pour exposer certaines informations du simulateur via une page web.
 * OpenSim.Server. Infrastructure du serveur.
 * OpenSim.Server.Base. Infrastructure de serveur commune pour le simulateur et les serveurs de grille robustes.
 * OpenSim.Server.Handlers. Classes pour traiter les données brutes entrantes et les traduire en demandes de service.  Utilisées principalement en mode grille pour les instances de serveurs ROBUST.  Par exemple, Asset/AssetServerGetHandler traduit les demandes internes de récupération des assets en service d'asset et répond avec les résultats.
 * OpenSim.Services. Le code qui fournit à la fois les implémentations des services (par exemple AssetService pour lire et écrire les assets dans le stockage persistant) les interfaces et l'infrastructure (principalement OpenSim.Services.Connectors qui crée les requêtes HTTP pour invoquer les services à distance).  En mode grille, ces services sont instanciés dans des instances Robust.exe.  En mode autonome, ils sont instanciés directement dans OpenSim.exe.
 * OpenSim.Tests.*. Code de test, à la fois l'infrastructure commune utilisée dans les tests de régression et certains codes de test client autonomes.  Les tests de régression réels sont répartis dans la base de code dans des paquets *.Test séparés (par exemple, le projet OpenSim.Region.Framework.Tests).
 * OpenSim.Tools. Quelques outils associés à OpenSimulator.  Non utilisés dans le fonctionnement réel d'OpenSimulator.
 * pCampbot. Un outil de test qui utilise des bots pour simuler la charge d'activité sur un simulateur.  Voir pCampBot pour plus de détails.  Non utilisé dans le fonctionnement réel d'OpenSimulator.

Restrictions de codage
Parce qu'OpenSimulator doit fonctionner à la fois sur Windows et Mono (généralement sur Linux ou Mac), nous sommes limités aux parties de .net que la version minimale de Mono que nous utilisons supporte.