* Gave ModuleLoader some good lovin'

* Introduced ModuleLoader.PickupModules that currently picks up IRegionModule:s from /bin
* Made LogBase thread-safe (or at least not thread-ignorant)
* Ignored some genned files
afrisby
lbsa71 2007-10-10 18:24:13 +00:00
parent 87d99ee2a2
commit a40e7100a2
21 changed files with 1527 additions and 1483 deletions

View File

@ -46,6 +46,8 @@ namespace OpenSim.Framework.Console
public class LogBase public class LogBase
{ {
private object m_syncRoot = new object();
StreamWriter Log; StreamWriter Log;
public conscmd_callback cmdparser; public conscmd_callback cmdparser;
public string componentname; public string componentname;
@ -64,7 +66,7 @@ namespace OpenSim.Framework.Console
} }
System.Console.WriteLine("Logs will be saved to current directory in " + LogFile); System.Console.WriteLine("Logs will be saved to current directory in " + LogFile);
Log = File.AppendText(LogFile); Log = File.AppendText(LogFile);
Log.WriteLine("========================================================================"); Log.WriteLine("========================================================================");
Log.WriteLine(componentname + " Started at " + DateTime.Now.ToString()); Log.WriteLine(componentname + " Started at " + DateTime.Now.ToString());
@ -76,27 +78,6 @@ namespace OpenSim.Framework.Console
Log.Close(); Log.Close();
} }
[Obsolete("Log.WriteLine is obsolete, use Warn / Error / Verbose instead.")]
public void Write(string format, params object[] args)
{
// HOUSEKEEPING : Will remove once use is removed.
Notice(format, args);
return;
}
[Obsolete("Log.WriteLine is obsolete, use Warn / Error / Verbose instead.")]
public void WriteLine(LogPriority importance, string format, params object[] args)
{
// HOUSEKEEPING : Will remove once use is removed.
Log.WriteLine(format, args);
Log.Flush();
if (!m_silent)
{
System.Console.WriteLine(format, args);
}
return;
}
/// <summary> /// <summary>
/// derive an ansi color from a string, ignoring the darker colors. /// derive an ansi color from a string, ignoring the darker colors.
/// This is used to help automatically bin component tags with colors /// This is used to help automatically bin component tags with colors
@ -178,7 +159,7 @@ namespace OpenSim.Framework.Console
public void Error(string sender, string format, params object[] args) public void Error(string sender, string format, params object[] args)
{ {
WritePrefixLine(DeriveColor(sender), sender); WritePrefixLine(DeriveColor(sender), sender);
Error( format, args); Error(format, args);
return; return;
} }
@ -229,7 +210,7 @@ namespace OpenSim.Framework.Console
WriteNewLine(ConsoleColor.Blue, format, args); WriteNewLine(ConsoleColor.Blue, format, args);
return; return;
} }
[Conditional("DEBUG")] [Conditional("DEBUG")]
public void Debug(string format, params object[] args) public void Debug(string format, params object[] args)
{ {
@ -247,66 +228,75 @@ namespace OpenSim.Framework.Console
private void WriteNewLine(ConsoleColor color, string format, params object[] args) private void WriteNewLine(ConsoleColor color, string format, params object[] args)
{ {
string now = System.DateTime.Now.ToString("[MM-dd hh:mm:ss] "); lock (m_syncRoot)
Log.Write(now);
Log.WriteLine(format, args);
Log.Flush();
if (!m_silent)
{ {
System.Console.Write(now); string now = System.DateTime.Now.ToString("[MM-dd hh:mm:ss] ");
try Log.Write(now);
Log.WriteLine(format, args);
Log.Flush();
if (!m_silent)
{ {
if (color != ConsoleColor.White) System.Console.Write(now);
System.Console.ForegroundColor = color; try
{
if (color != ConsoleColor.White)
System.Console.ForegroundColor = color;
System.Console.WriteLine(format, args); System.Console.WriteLine(format, args);
System.Console.ResetColor(); System.Console.ResetColor();
} }
catch (ArgumentNullException) catch (ArgumentNullException)
{ {
// Some older systems dont support coloured text. // Some older systems dont support coloured text.
System.Console.WriteLine(format, args); System.Console.WriteLine(format, args);
}
} }
return;
} }
return;
} }
private void WritePrefixLine(ConsoleColor color, string sender) private void WritePrefixLine(ConsoleColor color, string sender)
{ {
sender = sender.ToUpper(); lock (m_syncRoot)
Log.WriteLine("[" + sender + "] ");
Log.Flush();
System.Console.Write("[");
if (!m_silent)
{ {
try sender = sender.ToUpper();
Log.WriteLine("[" + sender + "] ");
Log.Flush();
System.Console.Write("[");
if (!m_silent)
{ {
System.Console.ForegroundColor = color; try
System.Console.Write(sender); {
System.Console.ResetColor(); System.Console.ForegroundColor = color;
} System.Console.Write(sender);
catch (ArgumentNullException) System.Console.ResetColor();
{ }
// Some older systems dont support coloured text. catch (ArgumentNullException)
System.Console.WriteLine(sender); {
// Some older systems dont support coloured text.
System.Console.WriteLine(sender);
}
} }
System.Console.Write("] \t");
return;
} }
System.Console.Write("] \t");
return;
} }
public string ReadLine() public string ReadLine()
{ {
try { try
{
string TempStr = System.Console.ReadLine(); string TempStr = System.Console.ReadLine();
Log.WriteLine(TempStr); Log.WriteLine(TempStr);
return TempStr; return TempStr;
} catch (Exception e) { }
catch (Exception e)
{
MainLog.Instance.Error("Console", "System.Console.ReadLine exception " + e.ToString()); MainLog.Instance.Error("Console", "System.Console.ReadLine exception " + e.ToString());
return ""; return "";
} }
@ -446,9 +436,12 @@ namespace OpenSim.Framework.Console
Array.Resize<string>(ref tempstrarray, tempstrarray.Length - 1); Array.Resize<string>(ref tempstrarray, tempstrarray.Length - 1);
Array.Reverse(tempstrarray); Array.Reverse(tempstrarray);
string[] cmdparams = (string[])tempstrarray; string[] cmdparams = (string[])tempstrarray;
try { try
{
RunCmd(cmd, cmdparams); RunCmd(cmd, cmdparams);
} catch (Exception e) { }
catch (Exception e)
{
MainLog.Instance.Error("Console", "Command failed with exception " + e.ToString()); MainLog.Instance.Error("Console", "Command failed with exception " + e.ToString());
} }
} }
@ -458,7 +451,7 @@ namespace OpenSim.Framework.Console
get get
{ {
string result = String.Empty; string result = String.Empty;
string stacktrace = Environment.StackTrace; string stacktrace = Environment.StackTrace;
List<string> lines = new List<string>(stacktrace.Split(new string[] { "at " }, StringSplitOptions.None)); List<string> lines = new List<string>(stacktrace.Split(new string[] { "at " }, StringSplitOptions.None));

View File

@ -1,132 +1,132 @@
/* /*
* Copyright (c) Contributors, http://opensimulator.org/ * Copyright (c) Contributors, http://opensimulator.org/
* See CONTRIBUTORS.TXT for a full list of copyright holders. * See CONTRIBUTORS.TXT for a full list of copyright holders.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright * * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer. * notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright * * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * documentation and/or other materials provided with the distribution.
* * Neither the name of the OpenSim Project nor the * * Neither the name of the OpenSim Project nor the
* names of its contributors may be used to endorse or promote products * names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission. * derived from this software without specific prior written permission.
* *
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* *
*/ */
/* Original code: Tedd Hansen */ /* Original code: Tedd Hansen */
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using OpenSim.Framework.Console; using OpenSim.Framework.Console;
using OpenSim.Region.Environment.Scenes; using OpenSim.Region.Environment.Scenes;
using OpenSim.Region.Environment.Scenes.Scripting; using OpenSim.Region.Environment.Scenes.Scripting;
using OpenSim.Region.Environment.Interfaces; using OpenSim.Region.Environment.Interfaces;
using libsecondlife; using libsecondlife;
namespace OpenSim.Grid.ScriptEngine.DotNetEngine namespace OpenSim.Grid.ScriptEngine.DotNetEngine
{ {
/// <summary> /// <summary>
/// This is the root object for ScriptEngine /// This is the root object for ScriptEngine
/// </summary> /// </summary>
[Serializable] [Serializable]
public class ScriptEngine :IRegionModule public class ScriptEngine :IRegionModule
{ {
internal OpenSim.Region.Environment.Scenes.Scene World; internal OpenSim.Region.Environment.Scenes.Scene World;
internal EventManager m_EventManager; // Handles and queues incoming events from OpenSim internal EventManager m_EventManager; // Handles and queues incoming events from OpenSim
internal EventQueueManager m_EventQueueManager; // Executes events internal EventQueueManager m_EventQueueManager; // Executes events
internal ScriptManager m_ScriptManager; // Load, unload and execute scripts internal ScriptManager m_ScriptManager; // Load, unload and execute scripts
internal AppDomainManager m_AppDomainManager; internal AppDomainManager m_AppDomainManager;
internal LSLLongCmdHandler m_LSLLongCmdHandler; internal LSLLongCmdHandler m_LSLLongCmdHandler;
private OpenSim.Framework.Console.LogBase m_log; private OpenSim.Framework.Console.LogBase m_log;
public ScriptEngine() public ScriptEngine()
{ {
//Common.SendToDebug("ScriptEngine Object Initialized"); //Common.SendToDebug("ScriptEngine Object Initialized");
Common.mySE = this; Common.mySE = this;
} }
public LogBase Log public LogBase Log
{ {
get { return m_log; } get { return m_log; }
} }
public void InitializeEngine(OpenSim.Region.Environment.Scenes.Scene Sceneworld, OpenSim.Framework.Console.LogBase logger) public void InitializeEngine(OpenSim.Region.Environment.Scenes.Scene Sceneworld, OpenSim.Framework.Console.LogBase logger)
{ {
World = Sceneworld; World = Sceneworld;
m_log = logger; m_log = logger;
Log.Verbose("ScriptEngine", "DotNet & LSL ScriptEngine initializing"); Log.Verbose("ScriptEngine", "DotNet & LSL ScriptEngine initializing");
//m_logger.Status("ScriptEngine", "InitializeEngine"); //m_logger.Status("ScriptEngine", "InitializeEngine");
// Create all objects we'll be using // Create all objects we'll be using
m_EventQueueManager = new EventQueueManager(this); m_EventQueueManager = new EventQueueManager(this);
m_EventManager = new EventManager(this); m_EventManager = new EventManager(this);
m_ScriptManager = new ScriptManager(this); m_ScriptManager = new ScriptManager(this);
m_AppDomainManager = new AppDomainManager(); m_AppDomainManager = new AppDomainManager();
m_LSLLongCmdHandler = new LSLLongCmdHandler(this); m_LSLLongCmdHandler = new LSLLongCmdHandler(this);
// Should we iterate the region for scripts that needs starting? // Should we iterate the region for scripts that needs starting?
// Or can we assume we are loaded before anything else so we can use proper events? // Or can we assume we are loaded before anything else so we can use proper events?
} }
public void Shutdown() public void Shutdown()
{ {
// We are shutting down // We are shutting down
} }
//// !!!FOR DEBUGGING ONLY!!! (for executing script directly from test app) //// !!!FOR DEBUGGING ONLY!!! (for executing script directly from test app)
//[Obsolete("!!!FOR DEBUGGING ONLY!!!")] //[Obsolete("!!!FOR DEBUGGING ONLY!!!")]
//public void StartScript(string ScriptID, IScriptHost ObjectID) //public void StartScript(string ScriptID, IScriptHost ObjectID)
//{ //{
// this.myEventManager.TEMP_OBJECT_ID = ObjectID; // this.myEventManager.TEMP_OBJECT_ID = ObjectID;
// Log.Status("ScriptEngine", "DEBUG FUNCTION: StartScript: " + ScriptID); // Log.Status("ScriptEngine", "DEBUG FUNCTION: StartScript: " + ScriptID);
// myScriptManager.StartScript(ScriptID, ObjectID); // myScriptManager.StartScript(ScriptID, ObjectID);
//} //}
#region IRegionModule #region IRegionModule
public void Initialise(Scene scene) public void Initialise(Scene scene)
{ {
this.InitializeEngine(scene, MainLog.Instance); this.InitializeEngine(scene, MainLog.Instance);
} }
public void PostInitialise() public void PostInitialise()
{ {
} }
public void CloseDown() public void Close()
{ {
} }
public string GetName() public string Name
{ {
return "LSLScriptingModule"; get { return "LSLScriptingModule"; }
} }
public bool IsSharedModule() public bool IsSharedModule
{ {
return false; get { return false; }
} }
#endregion #endregion
} }
} }

View File

@ -202,7 +202,7 @@ namespace OpenSim
configFiles = Directory.GetFiles(regionConfigPath, "*.xml"); configFiles = Directory.GetFiles(regionConfigPath, "*.xml");
} }
m_moduleLoader = new ModuleLoader(); m_moduleLoader = new ModuleLoader( m_log );
MainLog.Instance.Verbose("Loading Shared Modules"); MainLog.Instance.Verbose("Loading Shared Modules");
m_moduleLoader.LoadDefaultSharedModules(m_exceptSharedModules); m_moduleLoader.LoadDefaultSharedModules(m_exceptSharedModules);
@ -220,7 +220,9 @@ namespace OpenSim
m_moduleLoader.InitialiseSharedModules(scene); m_moduleLoader.InitialiseSharedModules(scene);
MainLog.Instance.Verbose("Loading Region's Modules"); MainLog.Instance.Verbose("Loading Region's Modules");
m_moduleLoader.CreateDefaultModules(scene, m_exceptModules);
//m_moduleLoader.CreateDefaultModules(scene, m_exceptModules);
m_moduleLoader.PickupModules( scene );
scene.SetModuleInterfaces(); scene.SetModuleInterfaces();
// Check if we have a script engine to load // Check if we have a script engine to load
@ -616,7 +618,7 @@ namespace OpenSim
m_log.Error("The currently loaded shared modules are:"); m_log.Error("The currently loaded shared modules are:");
foreach (OpenSim.Region.Environment.Interfaces.IRegionModule module in m_moduleLoader.LoadedSharedModules.Values) foreach (OpenSim.Region.Environment.Interfaces.IRegionModule module in m_moduleLoader.LoadedSharedModules.Values)
{ {
m_log.Error("Shared Module: " + module.GetName()); m_log.Error("Shared Module: " + module.Name);
} }
break; break;
} }

View File

@ -6,8 +6,8 @@ namespace OpenSim.Region.Environment.Interfaces
{ {
void Initialise(Scene scene); void Initialise(Scene scene);
void PostInitialise(); void PostInitialise();
void CloseDown(); void Close();
string GetName(); string Name { get; }
bool IsSharedModule(); bool IsSharedModule { get; }
} }
} }

View File

@ -1,162 +1,209 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Reflection; using System.Reflection;
using OpenSim.Region.Environment.Interfaces; using OpenSim.Framework.Console;
using OpenSim.Region.Environment.Modules; using OpenSim.Region.Environment.Interfaces;
using OpenSim.Region.Environment.Scenes; using OpenSim.Region.Environment.Modules;
using OpenSim.Region.Environment.Scenes;
namespace OpenSim.Region.Environment
{ namespace OpenSim.Region.Environment
public class ModuleLoader {
{ public class ModuleLoader
public Dictionary<string, Assembly> LoadedAssemblys = new Dictionary<string, Assembly>(); {
public Dictionary<string, Assembly> LoadedAssemblys = new Dictionary<string, Assembly>();
public List<IRegionModule> LoadedModules = new List<IRegionModule>();
public Dictionary<string, IRegionModule> LoadedSharedModules = new Dictionary<string, IRegionModule>(); public List<IRegionModule> LoadedModules = new List<IRegionModule>();
public Dictionary<string, IRegionModule> LoadedSharedModules = new Dictionary<string, IRegionModule>();
public ModuleLoader() private readonly LogBase m_log;
{
} public ModuleLoader(LogBase log)
{
/// <summary> m_log = log;
/// Should have a module factory? }
/// </summary>
/// <param name="scene"></param> /// <summary>
public void CreateDefaultModules(Scene scene, string exceptModules) /// Should have a module factory?
{ /// </summary>
IRegionModule module = new XferModule(); /// <param name="scene"></param>
InitialiseModule(module, scene); //public void CreateDefaultModules(Scene scene, string exceptModules)
//{
module = new ChatModule(); // IRegionModule module = new XferModule();
InitialiseModule(module, scene); // InitializeModule(module, scene);
module = new AvatarProfilesModule(); // module = new ChatModule();
InitialiseModule(module, scene); // InitializeModule(module, scene);
module = new XMLRPCModule(); // module = new AvatarProfilesModule();
InitialiseModule(module, scene); // InitializeModule(module, scene);
module = new WorldCommModule(); // module = new XMLRPCModule();
InitialiseModule(module, scene); // InitializeModule(module, scene);
LoadRegionModule("OpenSim.Region.ExtensionsScriptModule.dll", "ExtensionsScriptingModule", scene); // module = new WorldCommModule();
// InitializeModule(module, scene);
string lslPath = Path.Combine("ScriptEngines", "OpenSim.Region.ScriptEngine.DotNetEngine.dll");
LoadRegionModule(lslPath, "LSLScriptingModule", scene); // LoadRegionModule("OpenSim.Region.ExtensionsScriptModule.dll", "ExtensionsScriptingModule", scene);
}
// string lslPath = Path.Combine("ScriptEngines", "OpenSim.Region.ScriptEngine.DotNetEngine.dll");
// LoadRegionModule(lslPath, "LSLScriptingModule", scene);
public void LoadDefaultSharedModules(string exceptModules) //}
{
DynamicTextureModule dynamicModule = new DynamicTextureModule(); public void PickupModules(Scene scene)
LoadedSharedModules.Add(dynamicModule.GetName(), dynamicModule); {
} string moduleDir = ".";
public void InitialiseSharedModules(Scene scene) DirectoryInfo dir = new DirectoryInfo(moduleDir);
{
foreach (IRegionModule module in LoadedSharedModules.Values) foreach (FileInfo fileInfo in dir.GetFiles("*.dll"))
{ {
module.Initialise(scene); LoadRegionModules(fileInfo.FullName, scene);
scene.AddModule(module.GetName(), module); //should be doing this? }
} }
}
public void LoadDefaultSharedModules(string exceptModules)
private void InitialiseModule(IRegionModule module, Scene scene) {
{ DynamicTextureModule dynamicModule = new DynamicTextureModule();
module.Initialise(scene); LoadedSharedModules.Add(dynamicModule.Name, dynamicModule);
scene.AddModule(module.GetName(), module); }
LoadedModules.Add(module);
} public void InitialiseSharedModules(Scene scene)
{
/// <summary> foreach (IRegionModule module in LoadedSharedModules.Values)
/// Loads/initialises a Module instance that can be used by mutliple Regions {
/// </summary> module.Initialise(scene);
/// <param name="dllName"></param> scene.AddModule(module.Name, module); //should be doing this?
/// <param name="moduleName"></param> }
/// <param name="scene"></param> }
public void LoadSharedModule(string dllName, string moduleName)
{ private void InitializeModule(IRegionModule module, Scene scene)
IRegionModule module = LoadModule(dllName, moduleName); {
if (module != null) module.Initialise(scene);
{ scene.AddModule(module.Name, module);
LoadedSharedModules.Add(module.GetName(), module); LoadedModules.Add(module);
} }
}
/// <summary>
public void LoadRegionModule(string dllName, string moduleName, Scene scene) /// Loads/initialises a Module instance that can be used by mutliple Regions
{ /// </summary>
IRegionModule module = LoadModule(dllName, moduleName); /// <param name="dllName"></param>
if (module != null) /// <param name="moduleName"></param>
{ /// <param name="scene"></param>
InitialiseModule(module, scene); public void LoadSharedModule(string dllName, string moduleName)
} {
} IRegionModule module = LoadModule(dllName, moduleName);
if (module != null)
/// <summary> {
/// Loads a external Module (if not already loaded) and creates a new instance of it. LoadedSharedModules.Add(module.Name, module);
/// </summary> }
/// <param name="dllName"></param> }
/// <param name="moduleName"></param>
/// <param name="scene"></param> public void LoadRegionModules(string dllName, Scene scene)
public IRegionModule LoadModule(string dllName, string moduleName) {
{ IRegionModule[] modules = LoadModules(dllName);
Assembly pluginAssembly = null;
if (LoadedAssemblys.ContainsKey(dllName)) if (modules.Length > 0)
{ {
pluginAssembly = LoadedAssemblys[dllName]; m_log.Verbose("MODULES", "Found Module Library [{0}]", dllName );
} foreach (IRegionModule module in modules)
else {
{ m_log.Verbose("MODULES", " [{0}]: Initializing.", module.Name);
pluginAssembly = Assembly.LoadFrom(dllName); InitializeModule(module, scene);
LoadedAssemblys.Add(dllName, pluginAssembly); }
} }
}
IRegionModule module = null;
foreach (Type pluginType in pluginAssembly.GetTypes()) public void LoadRegionModule(string dllName, string moduleName, Scene scene)
{ {
if (pluginType.IsPublic) IRegionModule module = LoadModule(dllName, moduleName);
{ if (module != null)
if (!pluginType.IsAbstract) {
{ InitializeModule(module, scene);
Type typeInterface = pluginType.GetInterface("IRegionModule", true); }
}
if (typeInterface != null)
{ /// <summary>
module = /// Loads a external Module (if not already loaded) and creates a new instance of it.
(IRegionModule) Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString())); /// </summary>
break; /// <param name="dllName"></param>
} /// <param name="moduleName"></param>
typeInterface = null; /// <param name="scene"></param>
} public IRegionModule LoadModule(string dllName, string moduleName)
} {
} IRegionModule[] modules = LoadModules(dllName);
pluginAssembly = null;
foreach (IRegionModule module in modules)
if ((module != null) || (module.GetName() == moduleName)) {
{ if ((module != null) && (module.Name == moduleName))
return module; {
} return module;
}
return null; }
}
return null;
public void PostInitialise() }
{
foreach (IRegionModule module in LoadedSharedModules.Values) public IRegionModule[] LoadModules(string dllName)
{ {
module.PostInitialise(); List<IRegionModule> modules = new List<IRegionModule>();
}
Assembly pluginAssembly;
foreach (IRegionModule module in LoadedModules) if (!LoadedAssemblys.TryGetValue(dllName, out pluginAssembly ))
{ {
module.PostInitialise(); try
} {
} pluginAssembly = Assembly.LoadFrom(dllName);
LoadedAssemblys.Add(dllName, pluginAssembly);
public void ClearCache() }
{ catch( BadImageFormatException e )
LoadedAssemblys.Clear(); {
} m_log.Error( "MODULES", "The file [{0}] is not a valid assembly.", e.FileName );
} }
} }
if (pluginAssembly != null)
{
foreach (Type pluginType in pluginAssembly.GetTypes())
{
if (pluginType.IsPublic)
{
if (!pluginType.IsAbstract)
{
//if (dllName.Contains("OpenSim.Region.Environment"))
//{
// int i = 1;
// i++;
//}
if( pluginType.GetInterface("IRegionModule") != null )
{
modules.Add((IRegionModule) Activator.CreateInstance(pluginType));
}
}
}
}
}
return modules.ToArray();
}
public void PostInitialise()
{
foreach (IRegionModule module in LoadedSharedModules.Values)
{
module.PostInitialise();
}
foreach (IRegionModule module in LoadedModules)
{
module.PostInitialise();
}
}
public void ClearCache()
{
LoadedAssemblys.Clear();
}
}
}

View File

@ -1,43 +1,43 @@
using OpenSim.Framework.Interfaces; using OpenSim.Framework.Interfaces;
using OpenSim.Region.Environment.Interfaces; using OpenSim.Region.Environment.Interfaces;
using OpenSim.Region.Environment.Scenes; using OpenSim.Region.Environment.Scenes;
namespace OpenSim.Region.Environment.Modules namespace OpenSim.Region.Environment.Modules
{ {
public class AssetDownloadModule : IRegionModule public class AssetDownloadModule : IRegionModule
{ {
private Scene m_scene; private Scene m_scene;
public AssetDownloadModule() public AssetDownloadModule()
{ {
} }
public void Initialise(Scene scene) public void Initialise(Scene scene)
{ {
m_scene = scene; m_scene = scene;
m_scene.EventManager.OnNewClient += NewClient; m_scene.EventManager.OnNewClient += NewClient;
} }
public void PostInitialise() public void PostInitialise()
{ {
} }
public void CloseDown() public void Close()
{ {
} }
public string GetName() public string Name
{ {
return "AssetDownloadModule"; get { return "AssetDownloadModule"; }
} }
public bool IsSharedModule() public bool IsSharedModule
{ {
return false; get { return false; }
} }
public void NewClient(IClientAPI client) public void NewClient(IClientAPI client)
{ {
} }
} }
} }

View File

@ -1,65 +1,65 @@
using libsecondlife; using libsecondlife;
using OpenSim.Framework.Interfaces; using OpenSim.Framework.Interfaces;
using OpenSim.Region.Environment.Interfaces; using OpenSim.Region.Environment.Interfaces;
using OpenSim.Region.Environment.Scenes; using OpenSim.Region.Environment.Scenes;
namespace OpenSim.Region.Environment.Modules namespace OpenSim.Region.Environment.Modules
{ {
public class AvatarProfilesModule : IRegionModule public class AvatarProfilesModule : IRegionModule
{ {
private Scene m_scene; private Scene m_scene;
public AvatarProfilesModule() public AvatarProfilesModule()
{ {
} }
public void Initialise(Scene scene) public void Initialise(Scene scene)
{ {
m_scene = scene; m_scene = scene;
m_scene.EventManager.OnNewClient += NewClient; m_scene.EventManager.OnNewClient += NewClient;
} }
public void PostInitialise() public void PostInitialise()
{ {
} }
public void CloseDown() public void Close()
{ {
} }
public string GetName() public string Name
{ {
return "AvatarProfilesModule"; get { return "AvatarProfilesModule"; }
} }
public bool IsSharedModule() public bool IsSharedModule
{ {
return false; get { return false; }
} }
public void NewClient(IClientAPI client) public void NewClient(IClientAPI client)
{ {
client.OnRequestAvatarProperties += RequestAvatarProperty; client.OnRequestAvatarProperties += RequestAvatarProperty;
} }
public void RemoveClient(IClientAPI client) public void RemoveClient(IClientAPI client)
{ {
client.OnRequestAvatarProperties -= RequestAvatarProperty; client.OnRequestAvatarProperties -= RequestAvatarProperty;
} }
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
/// <param name="remoteClient"></param> /// <param name="remoteClient"></param>
/// <param name="avatarID"></param> /// <param name="avatarID"></param>
public void RequestAvatarProperty(IClientAPI remoteClient, LLUUID avatarID) public void RequestAvatarProperty(IClientAPI remoteClient, LLUUID avatarID)
{ {
string about = "OpenSim crash test dummy"; string about = "OpenSim crash test dummy";
string bornOn = "Before now"; string bornOn = "Before now";
string flAbout = "First life? What is one of those? OpenSim is my life!"; string flAbout = "First life? What is one of those? OpenSim is my life!";
LLUUID partner = new LLUUID("11111111-1111-0000-0000-000100bba000"); LLUUID partner = new LLUUID("11111111-1111-0000-0000-000100bba000");
remoteClient.SendAvatarProperties(avatarID, about, bornOn, "", flAbout, 0, LLUUID.Zero, LLUUID.Zero, "", remoteClient.SendAvatarProperties(avatarID, about, bornOn, "", flAbout, 0, LLUUID.Zero, LLUUID.Zero, "",
partner); partner);
} }
} }
} }

View File

@ -1,214 +1,214 @@
using System; using System;
using System.IO; using System.IO;
using System.Net.Sockets; using System.Net.Sockets;
using System.Threading; using System.Threading;
using libsecondlife; using libsecondlife;
using OpenSim.Framework.Interfaces; using OpenSim.Framework.Interfaces;
using OpenSim.Framework.Utilities; using OpenSim.Framework.Utilities;
using OpenSim.Region.Environment.Interfaces; using OpenSim.Region.Environment.Interfaces;
using OpenSim.Region.Environment.Scenes; using OpenSim.Region.Environment.Scenes;
namespace OpenSim.Region.Environment.Modules namespace OpenSim.Region.Environment.Modules
{ {
public class ChatModule : IRegionModule, ISimChat public class ChatModule : IRegionModule, ISimChat
{ {
private Scene m_scene; private Scene m_scene;
private string m_server = "irc2.choopa.net"; private string m_server = "irc2.choopa.net";
// private int m_port = 6668; // private int m_port = 6668;
//private string m_user = "USER OpenSimBot 8 * :I'm a OpenSim to irc bot"; //private string m_user = "USER OpenSimBot 8 * :I'm a OpenSim to irc bot";
private string m_nick = "OSimBot"; private string m_nick = "OSimBot";
private string m_channel = "#opensim"; private string m_channel = "#opensim";
// private NetworkStream m_stream; // private NetworkStream m_stream;
private TcpClient m_irc; private TcpClient m_irc;
private StreamWriter m_ircWriter; private StreamWriter m_ircWriter;
private StreamReader m_ircReader; private StreamReader m_ircReader;
// private Thread pingSender; // private Thread pingSender;
// private Thread listener; // private Thread listener;
private bool connected = false; private bool connected = false;
public ChatModule() public ChatModule()
{ {
m_nick = "OSimBot" + Util.RandomClass.Next(1, 99); m_nick = "OSimBot" + Util.RandomClass.Next(1, 99);
m_irc = null; m_irc = null;
m_ircWriter = null; m_ircWriter = null;
m_ircReader = null; m_ircReader = null;
} }
public void Initialise(Scene scene) public void Initialise(Scene scene)
{ {
m_scene = scene; m_scene = scene;
m_scene.EventManager.OnNewClient += NewClient; m_scene.EventManager.OnNewClient += NewClient;
m_scene.RegisterModuleInterface<ISimChat>(this); m_scene.RegisterModuleInterface<ISimChat>(this);
} }
public void PostInitialise() public void PostInitialise()
{ {
/* /*
try try
{ {
m_irc = new TcpClient(m_server, m_port); m_irc = new TcpClient(m_server, m_port);
m_stream = m_irc.GetStream(); m_stream = m_irc.GetStream();
m_ircReader = new StreamReader(m_stream); m_ircReader = new StreamReader(m_stream);
m_ircWriter = new StreamWriter(m_stream); m_ircWriter = new StreamWriter(m_stream);
pingSender = new Thread(new ThreadStart(this.PingRun)); pingSender = new Thread(new ThreadStart(this.PingRun));
pingSender.Start(); pingSender.Start();
listener = new Thread(new ThreadStart(this.ListenerRun)); listener = new Thread(new ThreadStart(this.ListenerRun));
listener.Start(); listener.Start();
m_ircWriter.WriteLine(m_user); m_ircWriter.WriteLine(m_user);
m_ircWriter.Flush(); m_ircWriter.Flush();
m_ircWriter.WriteLine("NICK " + m_nick); m_ircWriter.WriteLine("NICK " + m_nick);
m_ircWriter.Flush(); m_ircWriter.Flush();
m_ircWriter.WriteLine("JOIN " + m_channel); m_ircWriter.WriteLine("JOIN " + m_channel);
m_ircWriter.Flush(); m_ircWriter.Flush();
connected = true; connected = true;
} }
catch (Exception e) catch (Exception e)
{ {
Console.WriteLine(e.ToString()); Console.WriteLine(e.ToString());
} }
*/ */
} }
public void CloseDown() public void Close()
{ {
m_ircWriter.Close(); m_ircWriter.Close();
m_ircReader.Close(); m_ircReader.Close();
m_irc.Close(); m_irc.Close();
} }
public string GetName() public string Name
{ {
return "ChatModule"; get { return "ChatModule"; }
} }
public bool IsSharedModule() public bool IsSharedModule
{ {
return false; get { return false; }
} }
public void NewClient(IClientAPI client) public void NewClient(IClientAPI client)
{ {
client.OnChatFromViewer += SimChat; client.OnChatFromViewer += SimChat;
} }
public void PingRun() public void PingRun()
{ {
while (true) while (true)
{ {
m_ircWriter.WriteLine("PING :" + m_server); m_ircWriter.WriteLine("PING :" + m_server);
m_ircWriter.Flush(); m_ircWriter.Flush();
Thread.Sleep(15000); Thread.Sleep(15000);
} }
} }
public void ListenerRun() public void ListenerRun()
{ {
string inputLine; string inputLine;
LLVector3 pos = new LLVector3(128, 128, 20); LLVector3 pos = new LLVector3(128, 128, 20);
while (true) while (true)
{ {
while ((inputLine = m_ircReader.ReadLine()) != null) while ((inputLine = m_ircReader.ReadLine()) != null)
{ {
Console.WriteLine(inputLine); Console.WriteLine(inputLine);
if (inputLine.Contains(m_channel)) if (inputLine.Contains(m_channel))
{ {
string mess = inputLine.Substring(inputLine.IndexOf(m_channel)); string mess = inputLine.Substring(inputLine.IndexOf(m_channel));
m_scene.Broadcast(delegate(IClientAPI client) m_scene.Broadcast(delegate(IClientAPI client)
{ {
client.SendChatMessage( client.SendChatMessage(
Helpers.StringToField(mess), 255, pos, "IRC:", Helpers.StringToField(mess), 255, pos, "IRC:",
LLUUID.Zero); LLUUID.Zero);
}); });
} }
} }
} }
} }
public void SimChat(byte[] message, byte type, int channel, LLVector3 fromPos, string fromName, public void SimChat(byte[] message, byte type, int channel, LLVector3 fromPos, string fromName,
LLUUID fromAgentID) LLUUID fromAgentID)
{ {
ScenePresence avatar = null; ScenePresence avatar = null;
avatar = m_scene.GetScenePresence(fromAgentID); avatar = m_scene.GetScenePresence(fromAgentID);
if (avatar != null) if (avatar != null)
{ {
fromPos = avatar.AbsolutePosition; fromPos = avatar.AbsolutePosition;
fromName = avatar.Firstname + " " + avatar.Lastname; fromName = avatar.Firstname + " " + avatar.Lastname;
avatar = null; avatar = null;
} }
if (connected) if (connected)
{ {
m_ircWriter.WriteLine("PRIVMSG " + m_channel + " :" + "<" + fromName + ">: " + m_ircWriter.WriteLine("PRIVMSG " + m_channel + " :" + "<" + fromName + ">: " +
Util.FieldToString(message)); Util.FieldToString(message));
m_ircWriter.Flush(); m_ircWriter.Flush();
} }
if (channel == 0) if (channel == 0)
{ {
m_scene.ForEachScenePresence(delegate(ScenePresence presence) m_scene.ForEachScenePresence(delegate(ScenePresence presence)
{ {
int dis = -1000; int dis = -1000;
//err ??? the following code seems to be request a scenePresence when it already has a ref to it //err ??? the following code seems to be request a scenePresence when it already has a ref to it
avatar = m_scene.GetScenePresence(presence.ControllingClient.AgentId); avatar = m_scene.GetScenePresence(presence.ControllingClient.AgentId);
if (avatar != null) if (avatar != null)
{ {
dis = (int) avatar.AbsolutePosition.GetDistanceTo(fromPos); dis = (int) avatar.AbsolutePosition.GetDistanceTo(fromPos);
} }
switch (type) switch (type)
{ {
case 0: // Whisper case 0: // Whisper
if ((dis < 10) && (dis > -10)) if ((dis < 10) && (dis > -10))
{ {
//should change so the message is sent through the avatar rather than direct to the ClientView //should change so the message is sent through the avatar rather than direct to the ClientView
presence.ControllingClient.SendChatMessage(message, presence.ControllingClient.SendChatMessage(message,
type, type,
fromPos, fromPos,
fromName, fromName,
fromAgentID); fromAgentID);
} }
break; break;
case 1: // Say case 1: // Say
if ((dis < 30) && (dis > -30)) if ((dis < 30) && (dis > -30))
{ {
//Console.WriteLine("sending chat"); //Console.WriteLine("sending chat");
presence.ControllingClient.SendChatMessage(message, presence.ControllingClient.SendChatMessage(message,
type, type,
fromPos, fromPos,
fromName, fromName,
fromAgentID); fromAgentID);
} }
break; break;
case 2: // Shout case 2: // Shout
if ((dis < 100) && (dis > -100)) if ((dis < 100) && (dis > -100))
{ {
presence.ControllingClient.SendChatMessage(message, presence.ControllingClient.SendChatMessage(message,
type, type,
fromPos, fromPos,
fromName, fromName,
fromAgentID); fromAgentID);
} }
break; break;
case 0xff: // Broadcast case 0xff: // Broadcast
presence.ControllingClient.SendChatMessage(message, type, presence.ControllingClient.SendChatMessage(message, type,
fromPos, fromPos,
fromName, fromName,
fromAgentID); fromAgentID);
break; break;
} }
}); });
} }
} }
} }
} }

View File

@ -1,157 +1,157 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using libsecondlife; using libsecondlife;
using OpenSim.Framework.Types; using OpenSim.Framework.Types;
using OpenSim.Framework.Utilities; using OpenSim.Framework.Utilities;
using OpenSim.Region.Environment.Interfaces; using OpenSim.Region.Environment.Interfaces;
using OpenSim.Region.Environment.Scenes; using OpenSim.Region.Environment.Scenes;
namespace OpenSim.Region.Environment.Modules namespace OpenSim.Region.Environment.Modules
{ {
public class DynamicTextureModule : IRegionModule, IDynamicTextureManager public class DynamicTextureModule : IRegionModule, IDynamicTextureManager
{ {
private Dictionary<LLUUID, Scene> RegisteredScenes = new Dictionary<LLUUID, Scene>(); private Dictionary<LLUUID, Scene> RegisteredScenes = new Dictionary<LLUUID, Scene>();
private Dictionary<string, IDynamicTextureRender> RenderPlugins = private Dictionary<string, IDynamicTextureRender> RenderPlugins =
new Dictionary<string, IDynamicTextureRender>(); new Dictionary<string, IDynamicTextureRender>();
private Dictionary<LLUUID, DynamicTextureUpdater> Updaters = new Dictionary<LLUUID, DynamicTextureUpdater>(); private Dictionary<LLUUID, DynamicTextureUpdater> Updaters = new Dictionary<LLUUID, DynamicTextureUpdater>();
public void Initialise(Scene scene) public void Initialise(Scene scene)
{ {
if (!RegisteredScenes.ContainsKey(scene.RegionInfo.SimUUID)) if (!RegisteredScenes.ContainsKey(scene.RegionInfo.SimUUID))
{ {
RegisteredScenes.Add(scene.RegionInfo.SimUUID, scene); RegisteredScenes.Add(scene.RegionInfo.SimUUID, scene);
scene.RegisterModuleInterface<IDynamicTextureManager>(this); scene.RegisterModuleInterface<IDynamicTextureManager>(this);
} }
} }
public void PostInitialise() public void PostInitialise()
{ {
} }
public void CloseDown() public void Close()
{ {
} }
public string GetName() public string Name
{ {
return "DynamicTextureModule"; get { return "DynamicTextureModule"; }
} }
public bool IsSharedModule() public bool IsSharedModule
{ {
return true; get { return true; }
} }
public void RegisterRender(string handleType, IDynamicTextureRender render) public void RegisterRender(string handleType, IDynamicTextureRender render)
{ {
if (!RenderPlugins.ContainsKey(handleType)) if (!RenderPlugins.ContainsKey(handleType))
{ {
RenderPlugins.Add(handleType, render); RenderPlugins.Add(handleType, render);
} }
} }
public void ReturnData(LLUUID id, byte[] data) public void ReturnData(LLUUID id, byte[] data)
{ {
if (Updaters.ContainsKey(id)) if (Updaters.ContainsKey(id))
{ {
DynamicTextureUpdater updater = Updaters[id]; DynamicTextureUpdater updater = Updaters[id];
if (RegisteredScenes.ContainsKey(updater.SimUUID)) if (RegisteredScenes.ContainsKey(updater.SimUUID))
{ {
Scene scene = RegisteredScenes[updater.SimUUID]; Scene scene = RegisteredScenes[updater.SimUUID];
updater.DataReceived(data, scene); updater.DataReceived(data, scene);
} }
} }
} }
public LLUUID AddDynamicTextureURL(LLUUID simID, LLUUID primID, string contentType, string url, public LLUUID AddDynamicTextureURL(LLUUID simID, LLUUID primID, string contentType, string url,
string extraParams, int updateTimer) string extraParams, int updateTimer)
{ {
Console.WriteLine("dynamic texture being created: " + url + " of type " + contentType); Console.WriteLine("dynamic texture being created: " + url + " of type " + contentType);
if (RenderPlugins.ContainsKey(contentType)) if (RenderPlugins.ContainsKey(contentType))
{ {
DynamicTextureUpdater updater = new DynamicTextureUpdater(); DynamicTextureUpdater updater = new DynamicTextureUpdater();
updater.SimUUID = simID; updater.SimUUID = simID;
updater.PrimID = primID; updater.PrimID = primID;
updater.ContentType = contentType; updater.ContentType = contentType;
updater.Url = url; updater.Url = url;
updater.UpdateTimer = updateTimer; updater.UpdateTimer = updateTimer;
updater.UpdaterID = LLUUID.Random(); updater.UpdaterID = LLUUID.Random();
updater.Params = extraParams; updater.Params = extraParams;
if (!Updaters.ContainsKey(updater.UpdaterID)) if (!Updaters.ContainsKey(updater.UpdaterID))
{ {
Updaters.Add(updater.UpdaterID, updater); Updaters.Add(updater.UpdaterID, updater);
} }
RenderPlugins[contentType].AsyncConvertUrl(updater.UpdaterID, url, extraParams); RenderPlugins[contentType].AsyncConvertUrl(updater.UpdaterID, url, extraParams);
return updater.UpdaterID; return updater.UpdaterID;
} }
return LLUUID.Zero; return LLUUID.Zero;
} }
public LLUUID AddDynamicTextureData(LLUUID simID, LLUUID primID, string contentType, string data, public LLUUID AddDynamicTextureData(LLUUID simID, LLUUID primID, string contentType, string data,
string extraParams, int updateTimer) string extraParams, int updateTimer)
{ {
if (RenderPlugins.ContainsKey(contentType)) if (RenderPlugins.ContainsKey(contentType))
{ {
DynamicTextureUpdater updater = new DynamicTextureUpdater(); DynamicTextureUpdater updater = new DynamicTextureUpdater();
updater.SimUUID = simID; updater.SimUUID = simID;
updater.PrimID = primID; updater.PrimID = primID;
updater.ContentType = contentType; updater.ContentType = contentType;
updater.BodyData = data; updater.BodyData = data;
updater.UpdateTimer = updateTimer; updater.UpdateTimer = updateTimer;
updater.UpdaterID = LLUUID.Random(); updater.UpdaterID = LLUUID.Random();
updater.Params = extraParams; updater.Params = extraParams;
if (!Updaters.ContainsKey(updater.UpdaterID)) if (!Updaters.ContainsKey(updater.UpdaterID))
{ {
Updaters.Add(updater.UpdaterID, updater); Updaters.Add(updater.UpdaterID, updater);
} }
RenderPlugins[contentType].AsyncConvertData(updater.UpdaterID, data, extraParams); RenderPlugins[contentType].AsyncConvertData(updater.UpdaterID, data, extraParams);
return updater.UpdaterID; return updater.UpdaterID;
} }
return LLUUID.Zero; return LLUUID.Zero;
} }
public class DynamicTextureUpdater public class DynamicTextureUpdater
{ {
public LLUUID SimUUID; public LLUUID SimUUID;
public LLUUID UpdaterID; public LLUUID UpdaterID;
public string ContentType; public string ContentType;
public string Url; public string Url;
public string BodyData; public string BodyData;
public LLUUID PrimID; public LLUUID PrimID;
public int UpdateTimer; public int UpdateTimer;
public LLUUID LastAssetID; public LLUUID LastAssetID;
public string Params; public string Params;
public DynamicTextureUpdater() public DynamicTextureUpdater()
{ {
LastAssetID = LLUUID.Zero; LastAssetID = LLUUID.Zero;
UpdateTimer = 0; UpdateTimer = 0;
BodyData = null; BodyData = null;
} }
public void DataReceived(byte[] data, Scene scene) public void DataReceived(byte[] data, Scene scene)
{ {
//TODO delete the last asset(data), if it was a dynamic texture //TODO delete the last asset(data), if it was a dynamic texture
AssetBase asset = new AssetBase(); AssetBase asset = new AssetBase();
asset.FullID = LLUUID.Random(); asset.FullID = LLUUID.Random();
asset.Data = data; asset.Data = data;
asset.Name = "DynamicImage" + Util.RandomClass.Next(1, 10000); asset.Name = "DynamicImage" + Util.RandomClass.Next(1, 10000);
asset.Type = 0; asset.Type = 0;
scene.commsManager.AssetCache.AddAsset(asset); scene.commsManager.AssetCache.AddAsset(asset);
LastAssetID = asset.FullID; LastAssetID = asset.FullID;
SceneObjectPart part = scene.GetSceneObjectPart(PrimID); SceneObjectPart part = scene.GetSceneObjectPart(PrimID);
part.Shape.TextureEntry = new LLObject.TextureEntry(asset.FullID).ToBytes(); part.Shape.TextureEntry = new LLObject.TextureEntry(asset.FullID).ToBytes();
part.ScheduleFullUpdate(); part.ScheduleFullUpdate();
} }
} }
} }
} }

View File

@ -1,33 +1,33 @@
using OpenSim.Region.Environment.Interfaces; using OpenSim.Region.Environment.Interfaces;
using OpenSim.Region.Environment.Scenes; using OpenSim.Region.Environment.Scenes;
namespace OpenSim.Region.Environment.Modules namespace OpenSim.Region.Environment.Modules
{ {
public class FriendsModule : IRegionModule public class FriendsModule : IRegionModule
{ {
private Scene m_scene; private Scene m_scene;
public void Initialise(Scene scene) public void Initialise(Scene scene)
{ {
m_scene = scene; m_scene = scene;
} }
public void PostInitialise() public void PostInitialise()
{ {
} }
public void CloseDown() public void Close()
{ {
} }
public string GetName() public string Name
{ {
return "FriendsModule"; get { return "FriendsModule"; }
} }
public bool IsSharedModule() public bool IsSharedModule
{ {
return false; get { return false; }
} }
} }
} }

View File

@ -1,33 +1,33 @@
using OpenSim.Region.Environment.Interfaces; using OpenSim.Region.Environment.Interfaces;
using OpenSim.Region.Environment.Scenes; using OpenSim.Region.Environment.Scenes;
namespace OpenSim.Region.Environment.Modules namespace OpenSim.Region.Environment.Modules
{ {
public class GroupsModule : IRegionModule public class GroupsModule : IRegionModule
{ {
private Scene m_scene; private Scene m_scene;
public void Initialise(Scene scene) public void Initialise(Scene scene)
{ {
m_scene = scene; m_scene = scene;
} }
public void PostInitialise() public void PostInitialise()
{ {
} }
public void CloseDown() public void Close()
{ {
} }
public string GetName() public string Name
{ {
return "GroupsModule"; get { return "GroupsModule"; }
} }
public bool IsSharedModule() public bool IsSharedModule
{ {
return false; get { return false; }
} }
} }
} }

View File

@ -1,33 +1,33 @@
using OpenSim.Region.Environment.Interfaces; using OpenSim.Region.Environment.Interfaces;
using OpenSim.Region.Environment.Scenes; using OpenSim.Region.Environment.Scenes;
namespace OpenSim.Region.Environment.Modules namespace OpenSim.Region.Environment.Modules
{ {
public class InstantMessageModule : IRegionModule public class InstantMessageModule : IRegionModule
{ {
private Scene m_scene; private Scene m_scene;
public void Initialise(Scene scene) public void Initialise(Scene scene)
{ {
m_scene = scene; m_scene = scene;
} }
public void PostInitialise() public void PostInitialise()
{ {
} }
public void CloseDown() public void Close()
{ {
} }
public string GetName() public string Name
{ {
return "InstantMessageModule"; get { return "InstantMessageModule"; }
} }
public bool IsSharedModule() public bool IsSharedModule
{ {
return false; get { return false; }
} }
} }
} }

View File

@ -1,33 +1,33 @@
using OpenSim.Region.Environment.Interfaces; using OpenSim.Region.Environment.Interfaces;
using OpenSim.Region.Environment.Scenes; using OpenSim.Region.Environment.Scenes;
namespace OpenSim.Region.Environment.Modules namespace OpenSim.Region.Environment.Modules
{ {
public class InventoryModule : IRegionModule public class InventoryModule : IRegionModule
{ {
private Scene m_scene; private Scene m_scene;
public void Initialise(Scene scene) public void Initialise(Scene scene)
{ {
m_scene = scene; m_scene = scene;
} }
public void PostInitialise() public void PostInitialise()
{ {
} }
public void CloseDown() public void Close()
{ {
} }
public string GetName() public string Name
{ {
return "InventoryModule"; get { return "InventoryModule"; }
} }
public bool IsSharedModule() public bool IsSharedModule
{ {
return false; get { return false; }
} }
} }
} }

View File

@ -1,48 +1,48 @@
using libsecondlife; using libsecondlife;
using OpenSim.Framework.Interfaces; using OpenSim.Framework.Interfaces;
using OpenSim.Region.Environment.Interfaces; using OpenSim.Region.Environment.Interfaces;
using OpenSim.Region.Environment.Scenes; using OpenSim.Region.Environment.Scenes;
namespace OpenSim.Region.Environment.Modules namespace OpenSim.Region.Environment.Modules
{ {
public class TextureDownloadModule : IRegionModule public class TextureDownloadModule : IRegionModule
{ {
private Scene m_scene; private Scene m_scene;
public TextureDownloadModule() public TextureDownloadModule()
{ {
} }
public void Initialise(Scene scene) public void Initialise(Scene scene)
{ {
m_scene = scene; m_scene = scene;
m_scene.EventManager.OnNewClient += NewClient; m_scene.EventManager.OnNewClient += NewClient;
} }
public void PostInitialise() public void PostInitialise()
{ {
} }
public void CloseDown() public void Close()
{ {
} }
public string GetName() public string Name
{ {
return "TextureDownloadModule"; get { return "TextureDownloadModule"; }
} }
public bool IsSharedModule() public bool IsSharedModule
{ {
return false; get { return false; }
} }
public void NewClient(IClientAPI client) public void NewClient(IClientAPI client)
{ {
} }
public void TextureAssetCallback(LLUUID texture, byte[] data) public void TextureAssetCallback(LLUUID texture, byte[] data)
{ {
} }
} }
} }

View File

@ -71,18 +71,18 @@ namespace OpenSim.Region.Environment.Modules
{ {
} }
public void CloseDown() public void Close()
{ {
} }
public string GetName() public string Name
{ {
return m_name; get { return m_name; }
} }
public bool IsSharedModule() public bool IsSharedModule
{ {
return false; get { return false; }
} }
public void NewClient(IClientAPI client) public void NewClient(IClientAPI client)

View File

@ -85,18 +85,18 @@ namespace OpenSim.Region.Environment.Modules
{ {
} }
public void CloseDown() public void Close()
{ {
} }
public string GetName() public string Name
{ {
return m_name; get { return m_name; }
} }
public bool IsSharedModule() public bool IsSharedModule
{ {
return false; get { return false; }
} }
/********************************************** /**********************************************

View File

@ -1,173 +1,173 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using libsecondlife; using libsecondlife;
using OpenSim.Framework.Interfaces; using OpenSim.Framework.Interfaces;
using OpenSim.Region.Environment.Interfaces; using OpenSim.Region.Environment.Interfaces;
using OpenSim.Region.Environment.Scenes; using OpenSim.Region.Environment.Scenes;
namespace OpenSim.Region.Environment.Modules namespace OpenSim.Region.Environment.Modules
{ {
public class XferModule : IRegionModule, IXfer public class XferModule : IRegionModule, IXfer
{ {
public Dictionary<string, byte[]> NewFiles = new Dictionary<string, byte[]>(); public Dictionary<string, byte[]> NewFiles = new Dictionary<string, byte[]>();
public Dictionary<ulong, XferDownLoad> Transfers = new Dictionary<ulong, XferDownLoad>(); public Dictionary<ulong, XferDownLoad> Transfers = new Dictionary<ulong, XferDownLoad>();
private Scene m_scene; private Scene m_scene;
public XferModule() public XferModule()
{ {
} }
public void Initialise(Scene scene) public void Initialise(Scene scene)
{ {
m_scene = scene; m_scene = scene;
m_scene.EventManager.OnNewClient += NewClient; m_scene.EventManager.OnNewClient += NewClient;
m_scene.RegisterModuleInterface<IXfer>(this); m_scene.RegisterModuleInterface<IXfer>(this);
} }
public void PostInitialise() public void PostInitialise()
{ {
} }
public void CloseDown() public void Close()
{ {
} }
public string GetName() public string Name
{ {
return "XferModule"; get { return "XferModule"; }
} }
public bool IsSharedModule() public bool IsSharedModule
{ {
return false; get { return false; }
} }
public void NewClient(IClientAPI client) public void NewClient(IClientAPI client)
{ {
client.OnRequestXfer += RequestXfer; client.OnRequestXfer += RequestXfer;
client.OnConfirmXfer += AckPacket; client.OnConfirmXfer += AckPacket;
} }
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
/// <param name="remoteClient"></param> /// <param name="remoteClient"></param>
/// <param name="xferID"></param> /// <param name="xferID"></param>
/// <param name="fileName"></param> /// <param name="fileName"></param>
public void RequestXfer(IClientAPI remoteClient, ulong xferID, string fileName) public void RequestXfer(IClientAPI remoteClient, ulong xferID, string fileName)
{ {
lock (NewFiles) lock (NewFiles)
{ {
if (NewFiles.ContainsKey(fileName)) if (NewFiles.ContainsKey(fileName))
{ {
if (!Transfers.ContainsKey(xferID)) if (!Transfers.ContainsKey(xferID))
{ {
byte[] fileData = NewFiles[fileName]; byte[] fileData = NewFiles[fileName];
XferDownLoad transaction = new XferDownLoad(fileName, fileData, xferID, remoteClient); XferDownLoad transaction = new XferDownLoad(fileName, fileData, xferID, remoteClient);
Transfers.Add(xferID, transaction); Transfers.Add(xferID, transaction);
NewFiles.Remove(fileName); NewFiles.Remove(fileName);
transaction.StartSend(); transaction.StartSend();
} }
} }
} }
} }
public void AckPacket(IClientAPI remoteClient, ulong xferID, uint packet) public void AckPacket(IClientAPI remoteClient, ulong xferID, uint packet)
{ {
if (Transfers.ContainsKey(xferID)) if (Transfers.ContainsKey(xferID))
{ {
Transfers[xferID].AckPacket(packet); Transfers[xferID].AckPacket(packet);
} }
} }
public bool AddNewFile(string fileName, byte[] data) public bool AddNewFile(string fileName, byte[] data)
{ {
lock (NewFiles) lock (NewFiles)
{ {
if (NewFiles.ContainsKey(fileName)) if (NewFiles.ContainsKey(fileName))
{ {
NewFiles[fileName] = data; NewFiles[fileName] = data;
} }
else else
{ {
NewFiles.Add(fileName, data); NewFiles.Add(fileName, data);
} }
} }
return true; return true;
} }
public class XferDownLoad public class XferDownLoad
{ {
public byte[] Data = new byte[0]; public byte[] Data = new byte[0];
public string FileName = ""; public string FileName = "";
public ulong XferID = 0; public ulong XferID = 0;
public int DataPointer = 0; public int DataPointer = 0;
public uint Packet = 0; public uint Packet = 0;
public IClientAPI Client; public IClientAPI Client;
public uint Serial = 1; public uint Serial = 1;
private bool complete = false; private bool complete = false;
public XferDownLoad(string fileName, byte[] data, ulong xferID, IClientAPI client) public XferDownLoad(string fileName, byte[] data, ulong xferID, IClientAPI client)
{ {
FileName = fileName; FileName = fileName;
Data = data; Data = data;
XferID = xferID; XferID = xferID;
Client = client; Client = client;
} }
public XferDownLoad() public XferDownLoad()
{ {
} }
public void StartSend() public void StartSend()
{ {
if (Data.Length < 1000) if (Data.Length < 1000)
{ {
// for now (testing ) we only support files under 1000 bytes // for now (testing ) we only support files under 1000 bytes
byte[] transferData = new byte[Data.Length + 4]; byte[] transferData = new byte[Data.Length + 4];
Array.Copy(Helpers.IntToBytes(Data.Length), 0, transferData, 0, 4); Array.Copy(Helpers.IntToBytes(Data.Length), 0, transferData, 0, 4);
Array.Copy(Data, 0, transferData, 4, Data.Length); Array.Copy(Data, 0, transferData, 4, Data.Length);
Client.SendXferPacket(XferID, 0 + 0x80000000, transferData); Client.SendXferPacket(XferID, 0 + 0x80000000, transferData);
complete = true; complete = true;
} }
else else
{ {
byte[] transferData = new byte[1000 + 4]; byte[] transferData = new byte[1000 + 4];
Array.Copy(Helpers.IntToBytes(Data.Length), 0, transferData, 0, 4); Array.Copy(Helpers.IntToBytes(Data.Length), 0, transferData, 0, 4);
Array.Copy(Data, 0, transferData, 4, 1000); Array.Copy(Data, 0, transferData, 4, 1000);
Client.SendXferPacket(XferID, 0, transferData); Client.SendXferPacket(XferID, 0, transferData);
Packet++; Packet++;
DataPointer = 1000; DataPointer = 1000;
} }
} }
public void AckPacket(uint packet) public void AckPacket(uint packet)
{ {
if (!complete) if (!complete)
{ {
if ((Data.Length - DataPointer) > 1000) if ((Data.Length - DataPointer) > 1000)
{ {
byte[] transferData = new byte[1000]; byte[] transferData = new byte[1000];
Array.Copy(Data, DataPointer, transferData, 0, 1000); Array.Copy(Data, DataPointer, transferData, 0, 1000);
Client.SendXferPacket(XferID, Packet, transferData); Client.SendXferPacket(XferID, Packet, transferData);
Packet++; Packet++;
DataPointer += 1000; DataPointer += 1000;
} }
else else
{ {
byte[] transferData = new byte[Data.Length - DataPointer]; byte[] transferData = new byte[Data.Length - DataPointer];
Array.Copy(Data, DataPointer, transferData, 0, Data.Length - DataPointer); Array.Copy(Data, DataPointer, transferData, 0, Data.Length - DataPointer);
uint endPacket = Packet |= (uint) 0x80000000; uint endPacket = Packet |= (uint) 0x80000000;
Client.SendXferPacket(XferID, endPacket, transferData); Client.SendXferPacket(XferID, endPacket, transferData);
Packet++; Packet++;
DataPointer += (Data.Length - DataPointer); DataPointer += (Data.Length - DataPointer);
complete = true; complete = true;
} }
} }
} }
} }
} }
} }

View File

@ -1337,9 +1337,9 @@ namespace OpenSim.Region.Environment.Scenes
MainLog.Instance.Error("The currently loaded modules in " + RegionInfo.RegionName + " are:"); MainLog.Instance.Error("The currently loaded modules in " + RegionInfo.RegionName + " are:");
foreach (IRegionModule module in Modules.Values) foreach (IRegionModule module in Modules.Values)
{ {
if (!module.IsSharedModule()) if (!module.IsSharedModule)
{ {
MainLog.Instance.Error("Region Module: " + module.GetName()); MainLog.Instance.Error("Region Module: " + module.Name);
} }
} }
break; break;

View File

@ -62,13 +62,15 @@ namespace SimpleApp
UDPServer udpServer; UDPServer udpServer;
m_moduleLoader = new ModuleLoader(); m_moduleLoader = new ModuleLoader( m_log );
m_moduleLoader.LoadDefaultSharedModules(""); m_moduleLoader.LoadDefaultSharedModules("");
Scene scene = SetupScene(regionInfo, out udpServer); Scene scene = SetupScene(regionInfo, out udpServer);
m_moduleLoader.InitialiseSharedModules(scene); m_moduleLoader.InitialiseSharedModules(scene);
m_moduleLoader.CreateDefaultModules(scene, "");
// m_moduleLoader.CreateDefaultModules(scene, "");
scene.SetModuleInterfaces(); scene.SetModuleInterfaces();
scene.StartTimer(); scene.StartTimer();
@ -131,7 +133,7 @@ namespace SimpleApp
protected override Scene CreateScene(RegionInfo regionInfo, StorageManager storageManager, AgentCircuitManager circuitManager) protected override Scene CreateScene(RegionInfo regionInfo, StorageManager storageManager, AgentCircuitManager circuitManager)
{ {
return new MyWorld(regionInfo, circuitManager, m_commsManager, m_assetCache, storageManager, m_httpServer, new ModuleLoader()); return new MyWorld(regionInfo, circuitManager, m_commsManager, m_assetCache, storageManager, m_httpServer, new ModuleLoader( m_log ));
} }
protected override StorageManager CreateStorageManager(RegionInfo regionInfo) protected override StorageManager CreateStorageManager(RegionInfo regionInfo)

View File

@ -1,148 +1,148 @@
/* /*
* Copyright (c) Contributors, http://opensimulator.org/ * Copyright (c) Contributors, http://opensimulator.org/
* See CONTRIBUTORS.TXT for a full list of copyright holders. * See CONTRIBUTORS.TXT for a full list of copyright holders.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright * * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer. * notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright * * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * documentation and/or other materials provided with the distribution.
* * Neither the name of the OpenSim Project nor the * * Neither the name of the OpenSim Project nor the
* names of its contributors may be used to endorse or promote products * names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission. * derived from this software without specific prior written permission.
* *
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* *
*/ */
using System.Collections.Generic; using System.Collections.Generic;
using OpenSim.Framework.Console; using OpenSim.Framework.Console;
using OpenSim.Region.Environment.Interfaces; using OpenSim.Region.Environment.Interfaces;
using OpenSim.Region.Environment.Scenes; using OpenSim.Region.Environment.Scenes;
using OpenSim.Region.ExtensionsScriptModule.CSharp; using OpenSim.Region.ExtensionsScriptModule.CSharp;
using OpenSim.Region.ExtensionsScriptModule.JScript; using OpenSim.Region.ExtensionsScriptModule.JScript;
using OpenSim.Region.ExtensionsScriptModule.JVMEngine; using OpenSim.Region.ExtensionsScriptModule.JVMEngine;
namespace OpenSim.Region.ExtensionsScriptModule namespace OpenSim.Region.ExtensionsScriptModule
{ {
public class ScriptManager : IRegionModule, IExtensionScriptModule public class ScriptManager : IRegionModule, IExtensionScriptModule
{ {
readonly List<IScript> scripts = new List<IScript>(); readonly List<IScript> scripts = new List<IScript>();
Scene m_scene; Scene m_scene;
readonly Dictionary<string, IScriptCompiler> compilers = new Dictionary<string, IScriptCompiler>(); readonly Dictionary<string, IScriptCompiler> compilers = new Dictionary<string, IScriptCompiler>();
private void LoadFromCompiler(Dictionary<string, IScript> compiledscripts) private void LoadFromCompiler(Dictionary<string, IScript> compiledscripts)
{ {
foreach (KeyValuePair<string, IScript> script in compiledscripts) foreach (KeyValuePair<string, IScript> script in compiledscripts)
{ {
ScriptInfo scriptInfo = new ScriptInfo(m_scene); // Since each script could potentially corrupt their access with a stray assignment, making a new one for each script. ScriptInfo scriptInfo = new ScriptInfo(m_scene); // Since each script could potentially corrupt their access with a stray assignment, making a new one for each script.
MainLog.Instance.Verbose("Loading " + script.Key); MainLog.Instance.Verbose("Loading " + script.Key);
script.Value.Initialise(scriptInfo); script.Value.Initialise(scriptInfo);
scripts.Add(script.Value); scripts.Add(script.Value);
} }
MainLog.Instance.Verbose(string.Format("Finished loading {0} script(s)", compiledscripts.Count)); MainLog.Instance.Verbose(string.Format("Finished loading {0} script(s)", compiledscripts.Count));
} }
public ScriptManager() public ScriptManager()
{ {
// Default Engines // Default Engines
CSharpScriptEngine csharpCompiler = new CSharpScriptEngine(); CSharpScriptEngine csharpCompiler = new CSharpScriptEngine();
compilers.Add(csharpCompiler.FileExt(), csharpCompiler); compilers.Add(csharpCompiler.FileExt(), csharpCompiler);
JScriptEngine jscriptCompiler = new JScriptEngine(); JScriptEngine jscriptCompiler = new JScriptEngine();
compilers.Add(jscriptCompiler.FileExt(), jscriptCompiler); compilers.Add(jscriptCompiler.FileExt(), jscriptCompiler);
JavaEngine javaCompiler = new JavaEngine(); JavaEngine javaCompiler = new JavaEngine();
compilers.Add(javaCompiler.FileExt(), javaCompiler); compilers.Add(javaCompiler.FileExt(), javaCompiler);
} }
public void Initialise(Scene scene) public void Initialise(Scene scene)
{ {
System.Console.WriteLine("Initialising Extensions Scripting Module"); System.Console.WriteLine("Initialising Extensions Scripting Module");
m_scene = scene; m_scene = scene;
m_scene.RegisterModuleInterface<IExtensionScriptModule>(this); m_scene.RegisterModuleInterface<IExtensionScriptModule>(this);
} }
public void PostInitialise() public void PostInitialise()
{ {
} }
public void CloseDown() public void Close()
{ {
} }
public string GetName() public string Name
{ {
return "ExtensionsScriptingModule"; get { return "ExtensionsScriptingModule"; }
} }
public bool IsSharedModule() public bool IsSharedModule
{ {
return false; get { return false; }
} }
public bool Compile(string filename) public bool Compile(string filename)
{ {
foreach (KeyValuePair<string, IScriptCompiler> compiler in compilers) foreach (KeyValuePair<string, IScriptCompiler> compiler in compilers)
{ {
if (filename.EndsWith(compiler.Key)) if (filename.EndsWith(compiler.Key))
{ {
LoadFromCompiler(compiler.Value.compile(filename)); LoadFromCompiler(compiler.Value.compile(filename));
break; break;
} }
} }
return true; return true;
} }
public void RunScriptCmd(string[] args) public void RunScriptCmd(string[] args)
{ {
switch (args[0]) switch (args[0])
{ {
case "load": case "load":
Compile(args[1]); Compile(args[1]);
break; break;
default: default:
MainLog.Instance.Error("Unknown script command"); MainLog.Instance.Error("Unknown script command");
break; break;
} }
} }
public bool AddPreCompiledScript(IScript script) public bool AddPreCompiledScript(IScript script)
{ {
MainLog.Instance.Verbose("Loading script " + script.Name); MainLog.Instance.Verbose("Loading script " + script.Name);
ScriptInfo scriptInfo = new ScriptInfo(m_scene); // Since each script could potentially corrupt their access with a stray assignment, making a new one for each script. ScriptInfo scriptInfo = new ScriptInfo(m_scene); // Since each script could potentially corrupt their access with a stray assignment, making a new one for each script.
script.Initialise(scriptInfo); script.Initialise(scriptInfo);
scripts.Add(script); scripts.Add(script);
return true; return true;
} }
} }
public interface IExtensionScriptModule public interface IExtensionScriptModule
{ {
bool Compile(string filename); bool Compile(string filename);
bool AddPreCompiledScript(IScript script); bool AddPreCompiledScript(IScript script);
} }
interface IScriptCompiler interface IScriptCompiler
{ {
Dictionary<string, IScript> compile(string filename); Dictionary<string, IScript> compile(string filename);
string FileExt(); string FileExt();
} }
} }

View File

@ -1,132 +1,132 @@
/* /*
* Copyright (c) Contributors, http://opensimulator.org/ * Copyright (c) Contributors, http://opensimulator.org/
* See CONTRIBUTORS.TXT for a full list of copyright holders. * See CONTRIBUTORS.TXT for a full list of copyright holders.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright * * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer. * notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright * * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * documentation and/or other materials provided with the distribution.
* * Neither the name of the OpenSim Project nor the * * Neither the name of the OpenSim Project nor the
* names of its contributors may be used to endorse or promote products * names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission. * derived from this software without specific prior written permission.
* *
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* *
*/ */
/* Original code: Tedd Hansen */ /* Original code: Tedd Hansen */
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using OpenSim.Framework.Console; using OpenSim.Framework.Console;
using OpenSim.Region.Environment.Scenes; using OpenSim.Region.Environment.Scenes;
using OpenSim.Region.Environment.Scenes.Scripting; using OpenSim.Region.Environment.Scenes.Scripting;
using OpenSim.Region.Environment.Interfaces; using OpenSim.Region.Environment.Interfaces;
using libsecondlife; using libsecondlife;
namespace OpenSim.Region.ScriptEngine.DotNetEngine namespace OpenSim.Region.ScriptEngine.DotNetEngine
{ {
/// <summary> /// <summary>
/// This is the root object for ScriptEngine /// This is the root object for ScriptEngine
/// </summary> /// </summary>
[Serializable] [Serializable]
public class ScriptEngine :IRegionModule public class ScriptEngine :IRegionModule
{ {
internal OpenSim.Region.Environment.Scenes.Scene World; internal OpenSim.Region.Environment.Scenes.Scene World;
internal EventManager m_EventManager; // Handles and queues incoming events from OpenSim internal EventManager m_EventManager; // Handles and queues incoming events from OpenSim
internal EventQueueManager m_EventQueueManager; // Executes events internal EventQueueManager m_EventQueueManager; // Executes events
internal ScriptManager m_ScriptManager; // Load, unload and execute scripts internal ScriptManager m_ScriptManager; // Load, unload and execute scripts
internal AppDomainManager m_AppDomainManager; internal AppDomainManager m_AppDomainManager;
internal LSLLongCmdHandler m_LSLLongCmdHandler; internal LSLLongCmdHandler m_LSLLongCmdHandler;
private OpenSim.Framework.Console.LogBase m_log; private OpenSim.Framework.Console.LogBase m_log;
public ScriptEngine() public ScriptEngine()
{ {
//Common.SendToDebug("ScriptEngine Object Initialized"); //Common.SendToDebug("ScriptEngine Object Initialized");
Common.mySE = this; Common.mySE = this;
} }
public LogBase Log public LogBase Log
{ {
get { return m_log; } get { return m_log; }
} }
public void InitializeEngine(OpenSim.Region.Environment.Scenes.Scene Sceneworld, OpenSim.Framework.Console.LogBase logger) public void InitializeEngine(OpenSim.Region.Environment.Scenes.Scene Sceneworld, OpenSim.Framework.Console.LogBase logger)
{ {
World = Sceneworld; World = Sceneworld;
m_log = logger; m_log = logger;
Log.Verbose("ScriptEngine", "DotNet & LSL ScriptEngine initializing"); Log.Verbose("ScriptEngine", "DotNet & LSL ScriptEngine initializing");
//m_logger.Status("ScriptEngine", "InitializeEngine"); //m_logger.Status("ScriptEngine", "InitializeEngine");
// Create all objects we'll be using // Create all objects we'll be using
m_EventQueueManager = new EventQueueManager(this); m_EventQueueManager = new EventQueueManager(this);
m_EventManager = new EventManager(this); m_EventManager = new EventManager(this);
m_ScriptManager = new ScriptManager(this); m_ScriptManager = new ScriptManager(this);
m_AppDomainManager = new AppDomainManager(); m_AppDomainManager = new AppDomainManager();
m_LSLLongCmdHandler = new LSLLongCmdHandler(this); m_LSLLongCmdHandler = new LSLLongCmdHandler(this);
// Should we iterate the region for scripts that needs starting? // Should we iterate the region for scripts that needs starting?
// Or can we assume we are loaded before anything else so we can use proper events? // Or can we assume we are loaded before anything else so we can use proper events?
} }
public void Shutdown() public void Shutdown()
{ {
// We are shutting down // We are shutting down
} }
//// !!!FOR DEBUGGING ONLY!!! (for executing script directly from test app) //// !!!FOR DEBUGGING ONLY!!! (for executing script directly from test app)
//[Obsolete("!!!FOR DEBUGGING ONLY!!!")] //[Obsolete("!!!FOR DEBUGGING ONLY!!!")]
//public void StartScript(string ScriptID, IScriptHost ObjectID) //public void StartScript(string ScriptID, IScriptHost ObjectID)
//{ //{
// this.myEventManager.TEMP_OBJECT_ID = ObjectID; // this.myEventManager.TEMP_OBJECT_ID = ObjectID;
// Log.Status("ScriptEngine", "DEBUG FUNCTION: StartScript: " + ScriptID); // Log.Status("ScriptEngine", "DEBUG FUNCTION: StartScript: " + ScriptID);
// myScriptManager.StartScript(ScriptID, ObjectID); // myScriptManager.StartScript(ScriptID, ObjectID);
//} //}
#region IRegionModule #region IRegionModule
public void Initialise(Scene scene) public void Initialise(Scene scene)
{ {
this.InitializeEngine(scene, MainLog.Instance); this.InitializeEngine(scene, MainLog.Instance);
} }
public void PostInitialise() public void PostInitialise()
{ {
} }
public void CloseDown() public void Close()
{ {
} }
public string GetName() public string Name
{ {
return "LSLScriptingModule"; get { return "LSLScriptingModule"; }
} }
public bool IsSharedModule() public bool IsSharedModule
{ {
return false; get { return false; }
} }
#endregion #endregion
} }
} }