Overview of How Regions Work

From OpenSimulator

(Difference between revisions)
Jump to: navigation, search
(New page: The following is based on a brief discussion between ter_afk and rknop on #opensim-dev. It's archived here so that hopefully others can benefit from it. == Scene: the Core of the Region ...)
 
m (Source Enabled)
Line 5: Line 5:
 
OpenSim.Region.Framework.Scenes.Scene is the "heart" of OpenSimulator's functionality.  The method Scene.Heartbeat() starts the heartbeat going; it does this by calling the Update() method.  That method is the "main loop" of the region:
 
OpenSim.Region.Framework.Scenes.Scene is the "heart" of OpenSimulator's functionality.  The method Scene.Heartbeat() starts the heartbeat going; it does this by calling the Update() method.  That method is the "main loop" of the region:
  
<pre>
+
<source lang=csharp>
 
         public override void Update()
 
         public override void Update()
 
         {
 
         {
Line 11: Line 11:
 
             while (!shuttingdown)
 
             while (!shuttingdown)
 
             {
 
             {
</pre>
+
</source>
  
 
That loop is run over and over again.  At the bottom of the loop is:
 
That loop is run over and over again.  At the bottom of the loop is:
  
<pre>
+
<source lang=csharp>
 
                 maintc = Environment.TickCount - maintc;
 
                 maintc = Environment.TickCount - maintc;
 
                 maintc = (int)(m_timespan * 1000) - maintc;
 
                 maintc = (int)(m_timespan * 1000) - maintc;
Line 23: Line 23:
 
             }
 
             }
 
         }
 
         }
</pre>
+
</source>
  
 
In other words, if everything else didn't take as long as one heartbeat is supposed to take, the thread goes to sleep until it's time to service the next heartbeat.  This heartbeat runs about 10 times a second.
 
In other words, if everything else didn't take as long as one heartbeat is supposed to take, the thread goes to sleep until it's time to service the next heartbeat.  This heartbeat runs about 10 times a second.
Line 33: Line 33:
 
The <tt>bin/Regions/Regions.ini</tt> file determines which regions run.  Here's an example:
 
The <tt>bin/Regions/Regions.ini</tt> file determines which regions run.  Here's an example:
  
<pre>
+
<source lang=ini>
 
[Test]
 
[Test]
 
RegionUUID = 4b516a07-aa32-47e4-b4d9-52116255b4d2
 
RegionUUID = 4b516a07-aa32-47e4-b4d9-52116255b4d2
Line 44: Line 44:
 
MasterAvatarLastName = Avatar
 
MasterAvatarLastName = Avatar
 
MasterAvatarSandboxPassword = master_avatar_password
 
MasterAvatarSandboxPassword = master_avatar_password
</pre>
+
</source>

Revision as of 13:35, 18 September 2009

The following is based on a brief discussion between ter_afk and rknop on #opensim-dev. It's archived here so that hopefully others can benefit from it.

Scene: the Core of the Region

OpenSim.Region.Framework.Scenes.Scene is the "heart" of OpenSimulator's functionality. The method Scene.Heartbeat() starts the heartbeat going; it does this by calling the Update() method. That method is the "main loop" of the region:

public override void Update()
        {
            int maintc = 0;
            while (!shuttingdown)
            {

That loop is run over and over again. At the bottom of the loop is:

maintc = Environment.TickCount - maintc;
                maintc = (int)(m_timespan * 1000) - maintc;
 
                if ((maintc < (m_timespan * 1000)) && maintc > 0)
                    Thread.Sleep(maintc);
            }
        }

In other words, if everything else didn't take as long as one heartbeat is supposed to take, the thread goes to sleep until it's time to service the next heartbeat. This heartbeat runs about 10 times a second.

Other modules of all sorts can register heartbeat events that get called each pass through the main loop, and there are other events that modules can register for as well. (Details forthcoming....)

Which regions run?

The bin/Regions/Regions.ini file determines which regions run. Here's an example:

[Test]
RegionUUID = 4b516a07-aa32-47e4-b4d9-52116255b4d2
Location = 1000,1000
InternalAddress = 127.0.0.1
InternalPort = 9000
AllowAlternatePorts = False
ExternalHostName = SYSTEMIP
MasterAvatarFirstName = Master
MasterAvatarLastName = Avatar
MasterAvatarSandboxPassword = master_avatar_password
Personal tools
General
About This Wiki