Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Main page
Recent changes
Random page
Help about MediaWiki
Special pages
Open Simulator Technical Help
Search
Search
Appearance
Create account
Log in
Personal tools
Create account
Log in
Pages for logged out editors
learn more
Contributions
Talk
Editing
OpenSimulator Internals/Code Map/OpenSim
(section)
Page
Discussion
English
Read
Edit
View history
Tools
Tools
move to sidebar
hide
Actions
Read
Edit
View history
General
What links here
Related changes
Page information
Appearance
move to sidebar
hide
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
== Overview == OpenSim.exe is the region simulator process. It loads configuration, initialises the physics and script engines, loads region modules, connects to ROBUST services, and runs one or more regions. In standalone mode, service implementations run in-process. In grid mode, service connectors make HTTP calls to ROBUST. The same code runs both ways -- only the config differs. Class hierarchy: OpenSim β OpenSimBase β RegionApplicationBase Source repository: https://github.com/opensim/opensim ---- === Entry Point === OpenSim/Region/Application/OpenSim.cs -- class OpenSim, StartupSpecific() OpenSim.cs handles the interactive simulator layer: # Sets up console -- local, basic, rest, or GUI-driven based on config # Calls base.StartupSpecific() (see OpenSimBase below) # Registers HTTP handlers on MainServer.Instance: #* /simstatus -- returns "OK" #* /SHA1(osSecret) -- extended stats JSON #* /userStatsURI -- stats at user-configured path (optional) #* /robots.txt -- returns "# go away, Disallow: /" #* /index.php -- IndexPHPHandler for viewer login and capability discovery # Optional: registers managed stats endpoint # Hooks watchdog timeout handler # Prints startuplogo.txt if present # Selects default console region (root if multiple, the single region if only one) # Runs startup command script if configured # Starts timed script timer if configured Console commands registered: force update, change region, save/load xml/xml2/oar, edit scale, rotate/scale/translate scene, kick user, show users/connections/circuits/pending-objects/modules/regions/ratings, backup, create region, restart (disabled), command-script, remove-region, delete-region, estate create/set owner/set name/link region. Note: restart command is registered but disabled -- marked unreliable in the source. Shutdown: runs shutdown command script if configured, disposes timed script timer, calls base.ShutdownSpecific(). ---- === OpenSimBase === OpenSim/Region/Application/OpenSimBase.cs -- class OpenSimBase StartupSpecific() sequence: # Refuses to run if CombineContiguousRegions (MegaRegions) is set -- explicitly unsupported, fatal exit # Creates PID file if configured # Reads Stats_URI, SecurePermissionsLoading, permission modules, managed stats config from [Startup] # Loads SimulationDataStore plugin from [SimulationDataStore] -- throws if missing # Loads EstateDataStore plugin from [EstateDataStore] or [EstateService] -- throws if missing # Calls base.StartupSpecific() -- see RegionApplicationBase # Loads application plugins from /OpenSim/Startup extension point # Calls PostInitialise() on all plugins # Adds plugin commands to console Initialize() sequence (called from base.StartUp()): # Starts WorkManager.JobEngine if enabled # Handles SSL cert creation or renewal if configured # Handles PEM to PKCS12 cert conversion if configured # Sets HTTP server port and SSL flag from [Network] # Hooks SceneManager.OnRestartSim # Enables MemoryWatchdog and Watchdog only when all regions are ready -- avoids false positives during startup ---- === Region Creation === OpenSim/Region/Application/OpenSimBase.cs -- CreateRegion() Called once per region on startup, and again on restart. Sequence: # Gets IRegionModulesController from ApplicationRegistry -- fatal exit if missing # Sets region ServerURI from ExternalHostName and HTTP port # Calls SetupScene() -- creates AgentCircuitManager and Scene instance (see Scene below) # Calls controller.AddRegionToModules(scene) -- loads all region modules # Verifies required permissions modules are loaded if SecurePermissionsLoading = true -- fatal exit if missing # Calls scene.SetModuleInterfaces() -- wires up module references # Calls SetUpEstateOwner() if estate has no owner -- prompts console interactively # Calls scene.loadAllLandObjectsFromStorage() -- loads parcels from region database # Calls scene.LoadPrimsFromStorage() -- loads all objects from region database # Adds RegionStatsSimpleHandler to MainServer # Calls scene.RegisterRegionWithGrid() -- registers with ROBUST GridService -- fatal exit on failure # Calls scene.CreateScriptInstances() -- starts script engine for loaded objects # Adds scene to SceneManager # Hooks scene.EventManager.OnShutdown Estate owner setup (SetUpEstateOwner()): * Checks [Estates] config for DefaultEstateOwnerName, UUID, email, password * If not found, prompts console interactively * If user does not exist and UserAccountService is a local service, creates the user account * Stores estate settings with owner UUID PopulateRegionEstateInfo(): * Loads estate settings for region from database * If no estate assigned: checks TargetEstate in Regions.ini, then DefaultEstateName in [Estates] config, then prompts console interactively * Can create a new estate or join an existing one ---- === Scene Creation === OpenSim/Region/Application/OpenSimBase.cs -- SetupScene() β CreateScene() protected Scene SetupScene(RegionInfo regionInfo, int proxyOffset, IConfigSource configSource) { AgentCircuitManager circuitManager = new AgentCircuitManager(); Scene scene = CreateScene(regionInfo, m_simulationDataService, m_estateDataService, circuitManager); scene.LoadWorldMap(); return scene; } protected override Scene CreateScene(...) { return new Scene(regionInfo, circuitManager, simDataService, estateDataService, Config, m_version); } Scene constructor takes: RegionInfo, AgentCircuitManager, ISimulationDataService, IEstateDataService, IConfigSource, version string. See [[OpenSimulator Internals/Code Map/Scene]] for Scene internals. ---- === Config Loading === OpenSim/Region/Application/OpenSimBase.cs -- LoadConfigSettings() OpenSim/Region/Framework/ConfigurationLoader.cs Same layered config mechanism as ROBUST. Config loaded via ConfigurationLoader.LoadConfigSettings(). Architecture selected via Include-Architecture in OpenSim.ini -- determines standalone vs grid mode. ---- === HTTP Handlers === Registered on MainServer.Instance during startup: {| class="wikitable" ! Path !! Handler !! Notes |- | /simstatus || SimStatusHandler || Returns "OK" -- health check |- | /SHA1(osSecret) || XSimStatusHandler || Extended stats as JSON -- path is a hash for mild obscurity |- | /userStatsURI || UXSimStatusHandler || Same stats at user-configured path -- optional |- | /robots.txt || SimRobotsHandler || Blocks all web crawlers |- | /index.php || IndexPHPHandler || Viewer login and capability discovery -- see [[OpenSimulator Internals/Code Map/Shared]] |} ---- === Shutdown === ShutdownSpecific(): # Sends XmlRpc Stop to proxy if configured # Calls SceneManager.Close() -- closes all scenes # Disposes all application plugins # Calls base.ShutdownSpecific() ----
Summary:
Please note that all contributions to Open Simulator Technical Help may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Open Simulator Technical Help:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Search
Search
Editing
OpenSimulator Internals/Code Map/OpenSim
(section)
Add topic