OpenSim.Region.ScriptEngine.DotNetEngine
From OpenSimulator
Line 9: | Line 9: | ||
1. Create instance of OpenSim.Region.ScriptEngine.DotNetEngine.ScriptEngine(scene), where scene is current scene.<br /> | 1. Create instance of OpenSim.Region.ScriptEngine.DotNetEngine.ScriptEngine(scene), where scene is current scene.<br /> | ||
2. ScriptEngine will create instances of:<br /> | 2. ScriptEngine will create instances of:<br /> | ||
− | EventManager | + | EventManager |
− | EventQueueManager | + | EventQueueManager |
− | ScriptManager | + | ScriptManager |
3. EventManager will hook up all necessary events (all possible script events, script rez, script derez, etc).<br /> | 3. EventManager will hook up all necessary events (all possible script events, script rez, script derez, etc).<br /> | ||
4. When events are received, they are processed inside EventManager.<br /> | 4. When events are received, they are processed inside EventManager.<br /> | ||
For example: | For example: | ||
− | Event for loading a script will be processed and EventManager will tell ScriptManager to load the script. | + | Event for loading a script will be processed and EventManager will tell ScriptManager to load the script. |
− | Event such as touch_start is received in EventManager and translated to LSL-compatible request before being sent to EventQueueManager. | + | Event such as touch_start is received in EventManager and translated to LSL-compatible request before being sent to EventQueueManager. |
Note! If event is for a particular object, EventQueueManager will queue event for all scripts inside that object.<br /> | Note! If event is for a particular object, EventQueueManager will queue event for all scripts inside that object.<br /> | ||
5. If script is LSL (LSO ByteCode [http://libsecondlife.org/wiki/LSO]) then OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL is used to translate the bytecode from LSO to .Net Assembly.<br /> | 5. If script is LSL (LSO ByteCode [http://libsecondlife.org/wiki/LSO]) then OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL is used to translate the bytecode from LSO to .Net Assembly.<br /> | ||
6. EventQueueManager has a separate thread running to process its event queue. Events are actually functions inside the script .dll that is called "<state>_event_<event_name>" for example "0_event_touch_start". State is read from a global variable in the script .dll.<br /> | 6. EventQueueManager has a separate thread running to process its event queue. Events are actually functions inside the script .dll that is called "<state>_event_<event_name>" for example "0_event_touch_start". State is read from a global variable in the script .dll.<br /> |
Revision as of 11:33, 9 August 2007
DotNetEngine
Namespace: OpenSim.Region.ScriptEngine.DotNetEngine
DotNetEngine is a ScriptEngine that executes LSL scripts contained within objects.
Developed by Tedd Hansen, development blog: [1]
How it works:
1. Create instance of OpenSim.Region.ScriptEngine.DotNetEngine.ScriptEngine(scene), where scene is current scene.
2. ScriptEngine will create instances of:
EventManager EventQueueManager ScriptManager
3. EventManager will hook up all necessary events (all possible script events, script rez, script derez, etc).
4. When events are received, they are processed inside EventManager.
For example: Event for loading a script will be processed and EventManager will tell ScriptManager to load the script. Event such as touch_start is received in EventManager and translated to LSL-compatible request before being sent to EventQueueManager.
Note! If event is for a particular object, EventQueueManager will queue event for all scripts inside that object.
5. If script is LSL (LSO ByteCode [2]) then OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL is used to translate the bytecode from LSO to .Net Assembly.
6. EventQueueManager has a separate thread running to process its event queue. Events are actually functions inside the script .dll that is called "<state>_event_<event_name>" for example "0_event_touch_start". State is read from a global variable in the script .dll.