diff --git a/OpenSim/Framework/Communications/Cache/AssetCache.cs b/OpenSim/Framework/Communications/Cache/AssetCache.cs
index 3f594afb0c..d9472284e5 100644
--- a/OpenSim/Framework/Communications/Cache/AssetCache.cs
+++ b/OpenSim/Framework/Communications/Cache/AssetCache.cs
@@ -151,7 +151,7 @@ namespace OpenSim.Framework.Communications.Caches
public void AddAsset(AssetBase asset)
{
- // Console.WriteLine("adding asset " + asset.FullID.ToStringHyphenated());
+ System.Console.WriteLine("adding asset " + asset.FullID.ToStringHyphenated());
if (asset.Type == 0)
{
//Console.WriteLine("which is a texture");
@@ -161,6 +161,11 @@ namespace OpenSim.Framework.Communications.Caches
this.Textures.Add(textur.FullID, textur);
this._assetServer.UploadNewAsset(asset);
}
+ else
+ {
+ TextureImage textur = new TextureImage(asset);
+ this.Textures[asset.FullID] = textur;
+ }
}
else
{
diff --git a/OpenSim/Region/Application/OpenSimMain.cs b/OpenSim/Region/Application/OpenSimMain.cs
index 45032fcfc6..05d79dd009 100644
--- a/OpenSim/Region/Application/OpenSimMain.cs
+++ b/OpenSim/Region/Application/OpenSimMain.cs
@@ -45,6 +45,7 @@ using OpenSim.Region.Communications.Local;
using OpenSim.Region.Communications.OGS1;
using OpenSim.Framework.Communications.Caches;
using OpenSim.Region.Environment.Scenes;
+using OpenSim.Region.Environment.Modules;
using OpenSim.Region.Environment;
using System.Text;
using System.Collections.Generic;
@@ -77,11 +78,17 @@ namespace OpenSim
private string m_logFilename = ("region-console.log");
private bool m_permissions = false;
+ private bool m_DefaultModules = true;
+ private string m_exceptModules = "";
+ private bool m_DefaultSharedModules = true;
+ private string m_exceptSharedModules = "";
+
private bool standaloneAuthenticate = false;
private string standaloneWelcomeMessage = null;
private string standaloneInventoryPlugin = "";
private string standaloneUserPlugin = "";
-
+
+ private Scene m_consoleRegion = null;
public ConsoleCommand CreateAccount = null;
@@ -104,12 +111,10 @@ namespace OpenSim
}
ReadConfigSettings(startupSource);
-
}
protected void ReadConfigSettings(IConfigSource configSource)
{
-
m_networkServersInfo = new NetworkServersInfo();
m_sandbox = !configSource.Configs["Startup"].GetBoolean("gridmode", false);
m_physicsEngine = configSource.Configs["Startup"].GetString("physics", "basicphysics");
@@ -122,6 +127,11 @@ namespace OpenSim
m_scriptEngine = configSource.Configs["Startup"].GetString("script_engine", "DotNetEngine");
+ m_DefaultModules = configSource.Configs["Startup"].GetBoolean("default_modules", true);
+ m_DefaultSharedModules = configSource.Configs["Startup"].GetBoolean("default_shared_modules", true);
+ m_exceptModules = configSource.Configs["Startup"].GetString("except_modules", "");
+ m_exceptSharedModules = configSource.Configs["Startup"].GetString("except_shared_modules", "");
+
standaloneAuthenticate = configSource.Configs["StandAlone"].GetBoolean("accounts_authenticate", false);
standaloneWelcomeMessage = configSource.Configs["StandAlone"].GetString("welcome_message", "Welcome to OpenSim");
standaloneInventoryPlugin = configSource.Configs["StandAlone"].GetString("inventory_plugin", "OpenSim.Framework.Data.SQLite.dll");
@@ -178,6 +188,8 @@ namespace OpenSim
}
m_moduleLoader = new ModuleLoader();
+ MainLog.Instance.Verbose("Loading Shared Modules");
+ m_moduleLoader.LoadDefaultSharedModules(m_exceptSharedModules);
// Load all script engines found
OpenSim.Region.Environment.Scenes.Scripting.ScriptEngineLoader ScriptEngineLoader = new OpenSim.Region.Environment.Scenes.Scripting.ScriptEngineLoader(m_log);
@@ -191,6 +203,10 @@ namespace OpenSim
UDPServer udpServer;
Scene scene = SetupScene(regionInfo, out udpServer);
+ m_moduleLoader.InitialiseSharedModules(scene);
+ MainLog.Instance.Verbose("Loading Region's Modules");
+ m_moduleLoader.CreateDefaultModules(scene, m_exceptModules);
+ scene.SetModuleInterfaces();
// Check if we have a script engine to load
if (m_scriptEngine != null && m_scriptEngine != "")
@@ -211,6 +227,9 @@ namespace OpenSim
m_regionData.Add(regionInfo);
}
+ m_moduleLoader.PostInitialise();
+ m_moduleLoader.ClearCache();
+
// Start UDP servers
for (int i = 0; i < m_udpServers.Count; i++)
{
@@ -352,135 +371,154 @@ namespace OpenSim
/// Additional arguments passed to the command
public void RunCmd(string command, string[] cmdparams)
{
- switch (command)
+ if ((m_consoleRegion == null) || (command == "exit-region"))
{
- case "help":
- m_log.Error("alert - send alert to a designated user or all users.");
- m_log.Error(" alert [First] [Last] [Message] - send an alert to a user. Case sensitive.");
- m_log.Error(" alert general [Message] - send an alert to all users.");
- m_log.Error("backup - trigger a simulator backup");
- m_log.Error("load-xml [filename] - load prims from XML");
- m_log.Error("save-xml [filename] - save prims to XML");
- m_log.Error("script - manually trigger scripts? or script commands?");
- m_log.Error("show uptime - show simulator startup and uptime.");
- m_log.Error("show users - show info about connected users.");
- m_log.Error("shutdown - disconnect all clients and shutdown.");
- m_log.Error("terrain help - show help for terrain commands.");
- m_log.Error("quit - equivalent to shutdown.");
- break;
+ switch (command)
+ {
+ case "help":
+ m_log.Error("alert - send alert to a designated user or all users.");
+ m_log.Error(" alert [First] [Last] [Message] - send an alert to a user. Case sensitive.");
+ m_log.Error(" alert general [Message] - send an alert to all users.");
+ m_log.Error("backup - trigger a simulator backup");
+ m_log.Error("load-xml [filename] - load prims from XML");
+ m_log.Error("save-xml [filename] - save prims to XML");
+ m_log.Error("script - manually trigger scripts? or script commands?");
+ m_log.Error("show uptime - show simulator startup and uptime.");
+ m_log.Error("show users - show info about connected users.");
+ m_log.Error("shutdown - disconnect all clients and shutdown.");
+ m_log.Error("terrain help - show help for terrain commands.");
+ m_log.Error("quit - equivalent to shutdown.");
+ break;
- case "show":
- if (cmdparams.Length > 0)
- {
- Show(cmdparams[0]);
- }
- break;
-
- case "save-xml":
- if (cmdparams.Length > 0)
- {
- m_localScenes[0].SavePrimsToXml(cmdparams[0]);
- }
- else
- {
- m_localScenes[0].SavePrimsToXml("test.xml");
- }
- break;
-
- case "load-xml":
- if (cmdparams.Length > 0)
- {
- m_localScenes[0].LoadPrimsFromXml(cmdparams[0]);
- }
- else
- {
- m_localScenes[0].LoadPrimsFromXml("test.xml");
- }
- break;
-
- case "terrain":
- string result = "";
- foreach (Scene scene in m_localScenes)
- {
- if (!scene.Terrain.RunTerrainCmd(cmdparams, ref result, scene.RegionInfo.RegionName))
+ case "show":
+ if (cmdparams.Length > 0)
{
- m_log.Error(result);
+ Show(cmdparams[0]);
}
- }
- break;
- case "terrain-sim":
- string result2 = "";
- foreach (Scene scene in m_localScenes)
- {
- if (scene.RegionInfo.RegionName.ToLower() == cmdparams[0].ToLower())
- {
- string[] tmpCmdparams = new string[cmdparams.Length - 1];
- cmdparams.CopyTo(tmpCmdparams, 1);
+ break;
- if (!scene.Terrain.RunTerrainCmd(tmpCmdparams, ref result2, scene.RegionInfo.RegionName))
+ case "save-xml":
+ if (cmdparams.Length > 0)
+ {
+ m_localScenes[0].SavePrimsToXml(cmdparams[0]);
+ }
+ else
+ {
+ m_localScenes[0].SavePrimsToXml("test.xml");
+ }
+ break;
+
+ case "load-xml":
+ if (cmdparams.Length > 0)
+ {
+ m_localScenes[0].LoadPrimsFromXml(cmdparams[0]);
+ }
+ else
+ {
+ m_localScenes[0].LoadPrimsFromXml("test.xml");
+ }
+ break;
+
+ case "terrain":
+ string result = "";
+ foreach (Scene scene in m_localScenes)
+ {
+ if (!scene.Terrain.RunTerrainCmd(cmdparams, ref result, scene.RegionInfo.RegionName))
{
- m_log.Error(result2);
+ m_log.Error(result);
}
}
- }
- break;
- case "script":
- foreach (Scene scene in m_localScenes)
- {
- scene.SendCommandToScripts(cmdparams);
- }
- break;
+ break;
+ case "terrain-sim":
+ string result2 = "";
+ foreach (Scene scene in m_localScenes)
+ {
+ if (scene.RegionInfo.RegionName.ToLower() == cmdparams[0].ToLower())
+ {
+ string[] tmpCmdparams = new string[cmdparams.Length - 1];
+ cmdparams.CopyTo(tmpCmdparams, 1);
- case "command-script":
- if (cmdparams.Length > 0)
- {
- RunCommandScript(cmdparams[0]);
- }
- break;
+ if (!scene.Terrain.RunTerrainCmd(tmpCmdparams, ref result2, scene.RegionInfo.RegionName))
+ {
+ m_log.Error(result2);
+ }
+ }
+ }
+ break;
+ case "script":
+ foreach (Scene scene in m_localScenes)
+ {
+ scene.SendCommandToScripts(cmdparams);
+ }
+ break;
- case "permissions":
- // Treats each user as a super-admin when disabled
- foreach (Scene scene in m_localScenes)
- {
- if (Convert.ToBoolean(cmdparams[0]))
- scene.PermissionsMngr.EnablePermissions();
- else
- scene.PermissionsMngr.DisablePermissions();
- }
- break;
+ case "command-script":
+ if (cmdparams.Length > 0)
+ {
+ RunCommandScript(cmdparams[0]);
+ }
+ break;
- case "backup":
- foreach (Scene scene in m_localScenes)
- {
- scene.Backup();
- }
- break;
+ case "permissions":
+ // Treats each user as a super-admin when disabled
+ foreach (Scene scene in m_localScenes)
+ {
+ if (Convert.ToBoolean(cmdparams[0]))
+ scene.PermissionsMngr.EnablePermissions();
+ else
+ scene.PermissionsMngr.DisablePermissions();
+ }
+ break;
- case "alert":
- foreach (Scene scene in m_localScenes)
- {
- scene.HandleAlertCommand(cmdparams);
- }
- break;
+ case "backup":
+ foreach (Scene scene in m_localScenes)
+ {
+ scene.Backup();
+ }
+ break;
- case "create":
- if (CreateAccount != null)
- {
- CreateAccount(cmdparams);
- }
- break;
+ case "alert":
+ foreach (Scene scene in m_localScenes)
+ {
+ scene.HandleAlertCommand(cmdparams);
+ }
+ break;
- case "set-time":
- break;
+ case "create":
+ if (CreateAccount != null)
+ {
+ CreateAccount(cmdparams);
+ }
+ break;
- case "quit":
- case "shutdown":
- Shutdown();
- break;
+ case "quit":
+ case "shutdown":
+ Shutdown();
+ break;
- default:
- m_log.Error("Unknown command");
- break;
+ case "change-region":
+ foreach (Scene scene in m_localScenes)
+ {
+ if (scene.RegionInfo.RegionName.ToLower() == cmdparams[0].ToLower())
+ {
+ m_consoleRegion = scene;
+ }
+ }
+ break;
+
+ case "exit-region":
+ m_consoleRegion = null;
+ break;
+
+ default:
+ m_log.Error("Unknown command");
+ break;
+ }
+ }
+ else
+ {
+ //let the scene/region handle the command directly.
+ m_consoleRegion.ProcessConsoleCmd(command, cmdparams);
}
}
diff --git a/OpenSim/Region/Environment/Interfaces/IDynamicTextureManager.cs b/OpenSim/Region/Environment/Interfaces/IDynamicTextureManager.cs
new file mode 100644
index 0000000000..4da5a7e9d9
--- /dev/null
+++ b/OpenSim/Region/Environment/Interfaces/IDynamicTextureManager.cs
@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.IO;
+using libsecondlife;
+
+namespace OpenSim.Region.Environment.Interfaces
+{
+ public interface IDynamicTextureManager
+ {
+ void RegisterRender(string handleType, IDynamicTextureRender render);
+ void ReturnData(LLUUID id, byte[] data);
+ LLUUID AddDynamicTextureURL(LLUUID simID, LLUUID primID, string contentType, string url, string extraParams, int updateTimer);
+ }
+
+ public interface IDynamicTextureRender
+ {
+ string GetName();
+ string GetContentType();
+ bool SupportsAsynchronous();
+ byte[] ConvertUrl(string url, string extraParams);
+ byte[] ConvertStream(Stream data, string extraParams);
+ bool AsyncConvertUrl(LLUUID id, string url, string extraParams);
+ bool AsyncConvertStream(LLUUID id, Stream data, string extraParams);
+ }
+}
diff --git a/OpenSim/Region/Environment/Interfaces/IRegionModule.cs b/OpenSim/Region/Environment/Interfaces/IRegionModule.cs
index 84e156f8c2..11989fe355 100644
--- a/OpenSim/Region/Environment/Interfaces/IRegionModule.cs
+++ b/OpenSim/Region/Environment/Interfaces/IRegionModule.cs
@@ -10,5 +10,6 @@ namespace OpenSim.Region.Environment.Interfaces
void PostInitialise();
void CloseDown();
string GetName();
+ bool IsSharedModule();
}
}
diff --git a/OpenSim/Region/Environment/Interfaces/ISimChat.cs b/OpenSim/Region/Environment/Interfaces/ISimChat.cs
new file mode 100644
index 0000000000..0b83b34a80
--- /dev/null
+++ b/OpenSim/Region/Environment/Interfaces/ISimChat.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using libsecondlife;
+
+namespace OpenSim.Region.Environment.Interfaces
+{
+ public interface ISimChat
+ {
+ void SimChat(byte[] message, byte type, LLVector3 fromPos, string fromName, LLUUID fromAgentID);
+ }
+}
diff --git a/OpenSim/Region/Environment/ModuleLoader.cs b/OpenSim/Region/Environment/ModuleLoader.cs
index 1787a57638..e8e7bc2000 100644
--- a/OpenSim/Region/Environment/ModuleLoader.cs
+++ b/OpenSim/Region/Environment/ModuleLoader.cs
@@ -14,37 +14,51 @@ namespace OpenSim.Region.Environment
public Dictionary LoadedAssemblys = new Dictionary();
+ public List LoadedModules = new List();
+ public Dictionary LoadedSharedModules = new Dictionary();
+
public ModuleLoader()
{
}
///
- /// Really just a test method for loading a set of currently internal modules
+ /// Should have a module factory?
///
///
- public void CreateDefaultModules(Scene scene)
+ public void CreateDefaultModules(Scene scene, string exceptModules)
{
- //Testing IRegionModule ideas
XferModule xferManager = new XferModule();
xferManager.Initialise(scene);
scene.AddModule(xferManager.GetName(), xferManager);
+ LoadedModules.Add(xferManager);
ChatModule chatModule = new ChatModule();
chatModule.Initialise(scene);
scene.AddModule(chatModule.GetName(), chatModule);
+ LoadedModules.Add(chatModule);
AvatarProfilesModule avatarProfiles = new AvatarProfilesModule();
avatarProfiles.Initialise(scene);
scene.AddModule(avatarProfiles.GetName(), avatarProfiles);
+ LoadedModules.Add(avatarProfiles);
- this.LoadModule("OpenSim.Region.ExtensionsScriptModule.dll", "ExtensionsScriptingModule", scene);
+ this.LoadRegionModule("OpenSim.Region.ExtensionsScriptModule.dll", "ExtensionsScriptingModule", scene);
+ }
- // Post Initialise Modules, which most likely shouldn't be here
- // but should rather be in a separate method that is called after all modules are loaded/created/intialised
- xferManager.PostInitialise();
- // chatModule.PostInitialise(); //for now leave this disabled as it would start up a partially working irc bot
- avatarProfiles.PostInitialise();
+ public void LoadDefaultSharedModules(string exceptModules)
+ {
+ DynamicTextureModule dynamicModule = new DynamicTextureModule();
+ this.LoadedSharedModules.Add(dynamicModule.GetName(), dynamicModule);
+ }
+
+ public void InitialiseSharedModules(Scene scene)
+ {
+ foreach (IRegionModule module in this.LoadedSharedModules.Values)
+ {
+ module.Initialise(scene);
+ scene.AddModule(module.GetName(), module); //should be doing this?
+ }
}
///
@@ -53,18 +67,33 @@ namespace OpenSim.Region.Environment
///
///
///
- public void LoadSharedModule(string dllName, string moduleName, Scene scene)
+ public void LoadSharedModule(string dllName, string moduleName)
{
+ IRegionModule module = this.LoadModule(dllName, moduleName);
+ if (module != null)
+ {
+ this.LoadedSharedModules.Add(module.GetName(), module);
+ }
+ }
+ public void LoadRegionModule(string dllName, string moduleName, Scene scene)
+ {
+ IRegionModule module = this.LoadModule(dllName, moduleName);
+ if (module != null)
+ {
+ module.Initialise(scene);
+ scene.AddModule(module.GetName(), module);
+ LoadedModules.Add(module);
+ }
}
///
- /// Loads a external Module (if not already loaded) and creates a new instance of it for the passed Scene.
+ /// Loads a external Module (if not already loaded) and creates a new instance of it.
///
///
///
///
- public void LoadModule(string dllName, string moduleName, Scene scene)
+ public IRegionModule LoadModule(string dllName, string moduleName)
{
Assembly pluginAssembly = null;
if (LoadedAssemblys.ContainsKey(dllName))
@@ -97,13 +126,26 @@ namespace OpenSim.Region.Environment
}
pluginAssembly = null;
- if (module.GetName() == moduleName)
+ if ((module != null ) || (module.GetName() == moduleName))
{
- module.Initialise(scene);
- scene.AddModule(moduleName, module);
- module.PostInitialise(); //shouldn't be done here
+ return module;
}
+ return null;
+
+ }
+
+ public void PostInitialise()
+ {
+ foreach (IRegionModule module in this.LoadedSharedModules.Values)
+ {
+ module.PostInitialise();
+ }
+
+ foreach (IRegionModule module in this.LoadedModules)
+ {
+ module.PostInitialise();
+ }
}
public void ClearCache()
diff --git a/OpenSim/Region/Environment/Modules/AssetDownloadModule.cs b/OpenSim/Region/Environment/Modules/AssetDownloadModule.cs
index 5d7e6a6ef6..21a7e61a9e 100644
--- a/OpenSim/Region/Environment/Modules/AssetDownloadModule.cs
+++ b/OpenSim/Region/Environment/Modules/AssetDownloadModule.cs
@@ -38,6 +38,11 @@ namespace OpenSim.Region.Environment.Modules
return "AssetDownloadModule";
}
+ public bool IsSharedModule()
+ {
+ return false;
+ }
+
public void NewClient(IClientAPI client)
{
}
diff --git a/OpenSim/Region/Environment/Modules/AvatarProfilesModule.cs b/OpenSim/Region/Environment/Modules/AvatarProfilesModule.cs
index 1427c58be2..1ad061ae2d 100644
--- a/OpenSim/Region/Environment/Modules/AvatarProfilesModule.cs
+++ b/OpenSim/Region/Environment/Modules/AvatarProfilesModule.cs
@@ -39,11 +39,21 @@ namespace OpenSim.Region.Environment.Modules
return "AvatarProfilesModule";
}
+ public bool IsSharedModule()
+ {
+ return false;
+ }
+
public void NewClient(IClientAPI client)
{
client.OnRequestAvatarProperties += RequestAvatarProperty;
}
+ public void RemoveClient(IClientAPI client)
+ {
+ client.OnRequestAvatarProperties -= RequestAvatarProperty;
+ }
+
///
///
///
diff --git a/OpenSim/Region/Environment/Modules/ChatModule.cs b/OpenSim/Region/Environment/Modules/ChatModule.cs
index 752cde4d22..ac91b78744 100644
--- a/OpenSim/Region/Environment/Modules/ChatModule.cs
+++ b/OpenSim/Region/Environment/Modules/ChatModule.cs
@@ -14,7 +14,7 @@ using OpenSim.Framework.Console;
namespace OpenSim.Region.Environment.Modules
{
- public class ChatModule : IRegionModule
+ public class ChatModule : IRegionModule, ISimChat
{
private Scene m_scene;
@@ -45,11 +45,12 @@ namespace OpenSim.Region.Environment.Modules
m_scene = scene;
m_scene.EventManager.OnNewClient += NewClient;
- //should register a optional API Method, so other modules can send chat messages using this module
+ m_scene.RegisterModuleInterface(this);
}
public void PostInitialise()
{
+ /*
try
{
m_irc = new TcpClient(m_server, m_port);
@@ -75,6 +76,7 @@ namespace OpenSim.Region.Environment.Modules
{
Console.WriteLine(e.ToString());
}
+ */
}
public void CloseDown()
@@ -89,6 +91,11 @@ namespace OpenSim.Region.Environment.Modules
return "ChatModule";
}
+ public bool IsSharedModule()
+ {
+ return false;
+ }
+
public void NewClient(IClientAPI client)
{
client.OnChatFromViewer += SimChat;
diff --git a/OpenSim/Region/Environment/Modules/DynamicTextureModule.cs b/OpenSim/Region/Environment/Modules/DynamicTextureModule.cs
new file mode 100644
index 0000000000..6edebe7011
--- /dev/null
+++ b/OpenSim/Region/Environment/Modules/DynamicTextureModule.cs
@@ -0,0 +1,136 @@
+using System.Text;
+using System.Net;
+using System.Net.Sockets;
+using System.Threading;
+using System.IO;
+using System.Collections.Generic;
+using libsecondlife;
+using OpenJPEGNet;
+using OpenSim.Region.Environment.Scenes;
+using OpenSim.Region.Environment.Interfaces;
+using OpenSim.Framework.Interfaces;
+using OpenSim.Framework.Utilities;
+using OpenSim.Framework.Console;
+using OpenSim.Framework.Types;
+
+namespace OpenSim.Region.Environment.Modules
+{
+ public class DynamicTextureModule :IRegionModule, IDynamicTextureManager
+ {
+ private Dictionary RegisteredScenes = new Dictionary();
+ private Dictionary RenderPlugins= new Dictionary();
+ private Dictionary Updaters = new Dictionary();
+
+ public void Initialise(Scene scene)
+ {
+ if (!RegisteredScenes.ContainsKey(scene.RegionInfo.SimUUID))
+ {
+ RegisteredScenes.Add(scene.RegionInfo.SimUUID, scene);
+ scene.RegisterModuleInterface(this);
+ }
+ }
+
+ public void PostInitialise()
+ {
+
+ }
+
+ public void CloseDown()
+ {
+ }
+
+ public string GetName()
+ {
+ return "DynamicTextureModule";
+ }
+
+ public bool IsSharedModule()
+ {
+ return true;
+ }
+
+ public void RegisterRender(string handleType, IDynamicTextureRender render)
+ {
+ if (!RenderPlugins.ContainsKey(handleType))
+ {
+ RenderPlugins.Add(handleType, render);
+ }
+ }
+
+ public void ReturnData(LLUUID id, byte[] data)
+ {
+ if (Updaters.ContainsKey(id))
+ {
+ DynamicTextureUpdater updater = Updaters[id];
+ if (RegisteredScenes.ContainsKey(updater.SimUUID))
+ {
+ Scene scene = RegisteredScenes[updater.SimUUID];
+ updater.DataReceived(data, scene);
+ }
+ }
+ }
+
+ public LLUUID AddDynamicTextureURL(LLUUID simID, LLUUID primID, string contentType, string url, string extraParams, int updateTimer)
+ {
+ System.Console.WriteLine("dynamic texture being created " + url + " of type " + contentType);
+ if (this.RenderPlugins.ContainsKey(contentType))
+ {
+ DynamicTextureUpdater updater = new DynamicTextureUpdater();
+ updater.SimUUID = simID;
+ updater.PrimID = primID;
+ updater.ContentType = contentType;
+ updater.Url = url;
+ updater.UpdateTimer = updateTimer;
+ updater.UpdaterID = LLUUID.Random();
+ updater.Params = extraParams;
+
+ if (!this.Updaters.ContainsKey(updater.UpdaterID))
+ {
+ Updaters.Add(updater.UpdaterID, updater);
+ }
+
+ RenderPlugins[contentType].AsyncConvertUrl(updater.UpdaterID, url, extraParams);
+ return updater.UpdaterID;
+ }
+ return LLUUID.Zero;
+ }
+
+ public class DynamicTextureUpdater
+ {
+ public LLUUID SimUUID;
+ public LLUUID UpdaterID;
+ public string ContentType;
+ public string Url;
+ public Stream StreamData;
+ public LLUUID PrimID;
+ public int UpdateTimer;
+ public LLUUID LastAssetID;
+ public string Params;
+
+ public DynamicTextureUpdater()
+ {
+ LastAssetID = LLUUID.Zero;
+ UpdateTimer = 0;
+ StreamData = null;
+ }
+
+ public void DataReceived(byte[] data, Scene scene)
+ {
+ //TODO delete the last asset(data), if it was a dynamic texture
+
+ AssetBase asset = new AssetBase();
+ asset.FullID = LLUUID.Random();
+ asset.Data = data;
+ asset.Name = "DynamicImage" + Util.RandomClass.Next(1, 10000);
+ asset.Type = 0;
+ scene.commsManager.AssetCache.AddAsset(asset);
+
+ this.LastAssetID = asset.FullID;
+
+ SceneObjectPart part = scene.GetSceneObjectPart(PrimID);
+ part.Shape.TextureEntry = new LLObject.TextureEntry(asset.FullID).ToBytes();
+ part.ScheduleFullUpdate();
+ }
+ }
+ }
+}
diff --git a/OpenSim/Region/Environment/Modules/EmailModule.cs b/OpenSim/Region/Environment/Modules/EmailModule.cs
new file mode 100644
index 0000000000..2a90dd3916
--- /dev/null
+++ b/OpenSim/Region/Environment/Modules/EmailModule.cs
@@ -0,0 +1,10 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace OpenSim.Region.Environment.Modules
+{
+ class EmailModule
+ {
+ }
+}
diff --git a/OpenSim/Region/Environment/Modules/FriendsModule.cs b/OpenSim/Region/Environment/Modules/FriendsModule.cs
index f952bb2a87..d46039cbe1 100644
--- a/OpenSim/Region/Environment/Modules/FriendsModule.cs
+++ b/OpenSim/Region/Environment/Modules/FriendsModule.cs
@@ -31,5 +31,10 @@ namespace OpenSim.Region.Environment.Modules
{
return "FriendsModule";
}
+
+ public bool IsSharedModule()
+ {
+ return false;
+ }
}
}
diff --git a/OpenSim/Region/Environment/Modules/GroupsModule.cs b/OpenSim/Region/Environment/Modules/GroupsModule.cs
index 607b39558b..8e4b4097de 100644
--- a/OpenSim/Region/Environment/Modules/GroupsModule.cs
+++ b/OpenSim/Region/Environment/Modules/GroupsModule.cs
@@ -30,6 +30,11 @@ namespace OpenSim.Region.Environment.Modules
{
return "GroupsModule";
}
+
+ public bool IsSharedModule()
+ {
+ return false;
+ }
}
}
diff --git a/OpenSim/Region/Environment/Modules/InstantMessageModule.cs b/OpenSim/Region/Environment/Modules/InstantMessageModule.cs
index 9c09c48b1e..acf031be08 100644
--- a/OpenSim/Region/Environment/Modules/InstantMessageModule.cs
+++ b/OpenSim/Region/Environment/Modules/InstantMessageModule.cs
@@ -31,5 +31,10 @@ namespace OpenSim.Region.Environment.Modules
{
return "InstantMessageModule";
}
+
+ public bool IsSharedModule()
+ {
+ return false;
+ }
}
}
diff --git a/OpenSim/Region/Environment/Modules/InventoryModule.cs b/OpenSim/Region/Environment/Modules/InventoryModule.cs
index 94e7ba7d19..00b4d8ecfe 100644
--- a/OpenSim/Region/Environment/Modules/InventoryModule.cs
+++ b/OpenSim/Region/Environment/Modules/InventoryModule.cs
@@ -31,5 +31,10 @@ namespace OpenSim.Region.Environment.Modules
{
return "InventoryModule";
}
+
+ public bool IsSharedModule()
+ {
+ return false;
+ }
}
}
diff --git a/OpenSim/Region/Environment/Modules/ScriptsHttpRequests.cs b/OpenSim/Region/Environment/Modules/ScriptsHttpRequests.cs
new file mode 100644
index 0000000000..11af7187df
--- /dev/null
+++ b/OpenSim/Region/Environment/Modules/ScriptsHttpRequests.cs
@@ -0,0 +1,10 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace OpenSim.Region.Environment.Modules
+{
+ class ScriptsHttpRequests
+ {
+ }
+}
diff --git a/OpenSim/Region/Environment/Modules/TeleportModule.cs b/OpenSim/Region/Environment/Modules/TeleportModule.cs
new file mode 100644
index 0000000000..08fc2023f0
--- /dev/null
+++ b/OpenSim/Region/Environment/Modules/TeleportModule.cs
@@ -0,0 +1,10 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace OpenSim.Region.Environment.Modules
+{
+ class TeleportModule
+ {
+ }
+}
diff --git a/OpenSim/Region/Environment/Modules/TextureDownloadModule.cs b/OpenSim/Region/Environment/Modules/TextureDownloadModule.cs
index a92566dcb3..7d31644a33 100644
--- a/OpenSim/Region/Environment/Modules/TextureDownloadModule.cs
+++ b/OpenSim/Region/Environment/Modules/TextureDownloadModule.cs
@@ -37,6 +37,11 @@ namespace OpenSim.Region.Environment.Modules
return "TextureDownloadModule";
}
+ public bool IsSharedModule()
+ {
+ return false;
+ }
+
public void NewClient(IClientAPI client)
{
}
diff --git a/OpenSim/Region/Environment/Modules/XferModule.cs b/OpenSim/Region/Environment/Modules/XferModule.cs
index a0327e9b14..eec9f97b1d 100644
--- a/OpenSim/Region/Environment/Modules/XferModule.cs
+++ b/OpenSim/Region/Environment/Modules/XferModule.cs
@@ -45,6 +45,11 @@ namespace OpenSim.Region.Environment.Modules
return "XferModule";
}
+ public bool IsSharedModule()
+ {
+ return false;
+ }
+
public void NewClient(IClientAPI client)
{
client.OnRequestXfer += RequestXfer;
diff --git a/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs
index a9ded3f5ff..90e4a1f686 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs
@@ -35,6 +35,7 @@ using OpenSim.Framework.Types;
using OpenSim.Framework.Communications.Caches;
using OpenSim.Framework.Data;
using OpenSim.Framework.Utilities;
+using OpenSim.Region.Environment.Interfaces;
namespace OpenSim.Region.Environment.Scenes
{
@@ -94,7 +95,7 @@ namespace OpenSim.Region.Environment.Scenes
}
///
- /// Should be removed soon as the Chat modules should take over this function
+ ///
///
///
///
@@ -103,56 +104,10 @@ namespace OpenSim.Region.Environment.Scenes
///
public void SimChat(byte[] message, byte type, LLVector3 fromPos, string fromName, LLUUID fromAgentID)
{
- ScenePresence avatar = null;
- if (this.Avatars.ContainsKey(fromAgentID))
+ if (m_simChatModule != null)
{
- avatar = this.Avatars[fromAgentID];
- fromPos = avatar.AbsolutePosition;
- fromName = avatar.Firstname + " " + avatar.Lastname;
- avatar = null;
+ m_simChatModule.SimChat(message, type, fromPos, fromName, fromAgentID);
}
-
- this.ForEachScenePresence(delegate(ScenePresence presence)
- {
- int dis = -1000;
- if (this.Avatars.ContainsKey(presence.ControllingClient.AgentId))
- {
- avatar = this.Avatars[presence.ControllingClient.AgentId];
- dis = (int)avatar.AbsolutePosition.GetDistanceTo(fromPos);
- }
-
- switch (type)
- {
- case 0: // Whisper
- if ((dis < 10) && (dis > -10))
- {
- //should change so the message is sent through the avatar rather than direct to the ClientView
- presence.ControllingClient.SendChatMessage(message, type, fromPos, fromName,
- fromAgentID);
- }
- break;
- case 1: // Say
- if ((dis < 30) && (dis > -30))
- {
- //Console.WriteLine("sending chat");
- presence.ControllingClient.SendChatMessage(message, type, fromPos, fromName,
- fromAgentID);
- }
- break;
- case 2: // Shout
- if ((dis < 100) && (dis > -100))
- {
- presence.ControllingClient.SendChatMessage(message, type, fromPos, fromName,
- fromAgentID);
- }
- break;
-
- case 0xff: // Broadcast
- presence.ControllingClient.SendChatMessage(message, type, fromPos, fromName,
- fromAgentID);
- break;
- }
- });
}
///
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs
index 46fc86b369..b92f8c835f 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.cs
@@ -78,20 +78,23 @@ namespace OpenSim.Region.Environment.Scenes
protected StorageManager storageManager;
protected AgentCircuitManager authenticateHandler;
protected RegionCommsListener regionCommsHost;
- protected CommunicationsManager commsManager;
- // protected XferManager xferManager;
+ public CommunicationsManager commsManager;
+ // protected XferManager xferManager;
protected Dictionary capsHandlers = new Dictionary();
protected BaseHttpServer httpListener;
protected Dictionary Modules = new Dictionary();
- protected Dictionary APIMethods = new Dictionary();
+ public Dictionary ModuleInterfaces = new Dictionary();
+ protected Dictionary ModuleAPIMethods = new Dictionary();
- //API method Delegates
+ //API method Delegates and interfaces
// this most likely shouldn't be handled as a API method like this, but doing it for testing purposes
- public ModuleAPIMethod2AddXferFile = null;
-
+ public ModuleAPIMethod2 AddXferFile = null;
+
+ private ISimChat m_simChatModule = null;
+
#region Properties
public AgentCircuitManager AuthenticateHandler
@@ -152,7 +155,7 @@ namespace OpenSim.Region.Environment.Scenes
AssetCache assetCach, StorageManager storeManager, BaseHttpServer httpServer, ModuleLoader moduleLoader)
{
updateLock = new Mutex(false);
-
+
m_moduleLoader = moduleLoader;
authenticateHandler = authen;
commsManager = commsMan;
@@ -169,9 +172,6 @@ namespace OpenSim.Region.Environment.Scenes
m_eventManager = new EventManager();
m_permissionManager = new PermissionManager(this);
- MainLog.Instance.Verbose("Loading Region Modules");
- m_moduleLoader.CreateDefaultModules(this);
-
m_eventManager.OnParcelPrimCountAdd +=
m_LandManager.addPrimToLandPrimCounts;
@@ -189,13 +189,15 @@ namespace OpenSim.Region.Environment.Scenes
httpListener = httpServer;
- SetMethodDelegates();
}
#endregion
- private void SetMethodDelegates()
+ public void SetModuleInterfaces()
{
+ m_simChatModule = this.RequestModuleInterface();
+
+ //should change so it uses the module interface functions
AddXferFile = (ModuleAPIMethod2)this.RequestAPIMethod("API_AddXferFile");
}
@@ -526,7 +528,7 @@ namespace OpenSim.Region.Environment.Scenes
MainLog.Instance.Verbose("Loaded " + PrimsFromDB.Count.ToString() + " SceneObject(s)");
}
-
+
///
/// Returns a new unallocated primitive ID
@@ -635,12 +637,12 @@ namespace OpenSim.Region.Environment.Scenes
//obj.RegenerateFullIDs();
AddEntity(obj);
- SceneObjectPart rootPart = obj.GetChildPart(obj.UUID);
- rootPart.PhysActor = phyScene.AddPrim(
- new PhysicsVector(rootPart.AbsolutePosition.X, rootPart.AbsolutePosition.Y, rootPart.AbsolutePosition.Z),
- new PhysicsVector(rootPart.Scale.X, rootPart.Scale.Y, rootPart.Scale.Z),
- new Axiom.Math.Quaternion(rootPart.RotationOffset.W, rootPart.RotationOffset.X,
- rootPart.RotationOffset.Y, rootPart.RotationOffset.Z));
+ SceneObjectPart rootPart = obj.GetChildPart(obj.UUID);
+ rootPart.PhysActor = phyScene.AddPrim(
+ new PhysicsVector(rootPart.AbsolutePosition.X, rootPart.AbsolutePosition.Y, rootPart.AbsolutePosition.Z),
+ new PhysicsVector(rootPart.Scale.X, rootPart.Scale.Y, rootPart.Scale.Z),
+ new Axiom.Math.Quaternion(rootPart.RotationOffset.W, rootPart.RotationOffset.X,
+ rootPart.RotationOffset.Y, rootPart.RotationOffset.Z));
primCount++;
}
}
@@ -692,7 +694,7 @@ namespace OpenSim.Region.Environment.Scenes
protected virtual void SubscribeToClientEvents(IClientAPI client)
{
- // client.OnStartAnim += StartAnimation;
+ // client.OnStartAnim += StartAnimation;
client.OnRegionHandShakeReply += SendLayerData;
//remoteClient.OnRequestWearables += new GenericCall(this.GetInitialPrims);
client.OnModifyTerrain += ModifyTerrain;
@@ -742,7 +744,7 @@ namespace OpenSim.Region.Environment.Scenes
client.OnRezScript += RezScript;
client.OnRemoveTaskItem += RemoveTaskInventory;
- // client.OnRequestAvatarProperties += RequestAvatarProperty;
+ // client.OnRequestAvatarProperties += RequestAvatarProperty;
client.OnGrabObject += ProcessObjectGrab;
@@ -1071,13 +1073,12 @@ namespace OpenSim.Region.Environment.Scenes
AgentCircuitData agent = remoteClient.RequestClientInfo();
agent.BaseFolder = LLUUID.Zero;
agent.InventoryFolder = LLUUID.Zero;
- // agent.startpos = new LLVector3(128, 128, 70);
+ // agent.startpos = new LLVector3(128, 128, 70);
agent.startpos = position;
agent.child = true;
commsManager.InterRegion.InformRegionOfChildAgent(regionHandle, agent);
commsManager.InterRegion.ExpectAvatarCrossing(regionHandle, remoteClient.AgentId, position, false);
- //TODO: following line is hard coded to port 9000, really need to change this as soon as possible
AgentCircuitData circuitdata = remoteClient.RequestClientInfo();
string capsPath = Util.GetCapsURL(remoteClient.AgentId);
remoteClient.SendRegionTeleport(regionHandle, 13, reg.ExternalEndPoint, 4, (1 << 4), capsPath);
@@ -1114,23 +1115,45 @@ namespace OpenSim.Region.Environment.Scenes
}
}
+ //following delegate methods will be removed, so use the interface methods (below these)
public void RegisterAPIMethod(string name, object method)
{
- if (!this.APIMethods.ContainsKey(name))
+ if (!this.ModuleAPIMethods.ContainsKey(name))
{
- this.APIMethods.Add(name, method);
+ this.ModuleAPIMethods.Add(name, method);
}
}
public object RequestAPIMethod(string name)
{
- if (this.APIMethods.ContainsKey(name))
+ if (this.ModuleAPIMethods.ContainsKey(name))
{
- return APIMethods[name];
+ return ModuleAPIMethods[name];
}
return false;
}
+ public void RegisterModuleInterface( M mod)
+ {
+ //Console.WriteLine("registering module interface " + typeof(M));
+ if (!this.ModuleInterfaces.ContainsKey(typeof(M)))
+ {
+ ModuleInterfaces.Add(typeof(M), mod);
+ }
+ }
+
+ public T RequestModuleInterface()
+ {
+ if (ModuleInterfaces.ContainsKey(typeof(T)))
+ {
+ return (T)ModuleInterfaces[typeof(T)];
+ }
+ else
+ {
+ return default(T);
+ }
+ }
+
public void SetTimePhase(int phase)
{
m_timePhase = phase;
@@ -1205,6 +1228,49 @@ namespace OpenSim.Region.Environment.Scenes
}
#endregion
+ public void ProcessConsoleCmd(string command, string[] cmdparams)
+ {
+ switch (command)
+ {
+ case "save-xml":
+ if (cmdparams.Length > 0)
+ {
+ SavePrimsToXml(cmdparams[0]);
+ }
+ else
+ {
+ SavePrimsToXml("test.xml");
+ }
+ break;
+
+ case "load-xml":
+ if (cmdparams.Length > 0)
+ {
+ LoadPrimsFromXml(cmdparams[0]);
+ }
+ else
+ {
+ LoadPrimsFromXml("test.xml");
+ }
+ break;
+
+ case "set-time":
+ break;
+
+ case "backup":
+ Backup();
+ break;
+
+ case "alert":
+ HandleAlertCommand(cmdparams);
+ break;
+
+ default:
+ MainLog.Instance.Error("Unknown command: " + command);
+ break;
+ }
+ }
+
#region Script Engine
private List ScriptEngines = new List();
public void AddScriptEngine(OpenSim.Region.Environment.Scenes.Scripting.ScriptEngineInterface ScriptEngine, LogBase m_logger)
@@ -1248,5 +1314,22 @@ namespace OpenSim.Region.Environment.Scenes
}
return null;
}
+
+ public SceneObjectPart GetSceneObjectPart(LLUUID fullID)
+ {
+ bool hasPrim = false;
+ foreach (EntityBase ent in Entities.Values)
+ {
+ if (ent is SceneObjectGroup)
+ {
+ hasPrim = ((SceneObjectGroup)ent).HasChildPrim(fullID);
+ if (hasPrim != false)
+ {
+ return ((SceneObjectGroup)ent).GetChildPart(fullID);
+ }
+ }
+ }
+ return null;
+ }
}
}
diff --git a/OpenSim/Region/Examples/SimpleApp/MyNpcCharacter.cs b/OpenSim/Region/Examples/SimpleApp/MyNpcCharacter.cs
index 003d3d43e0..4b05287195 100644
--- a/OpenSim/Region/Examples/SimpleApp/MyNpcCharacter.cs
+++ b/OpenSim/Region/Examples/SimpleApp/MyNpcCharacter.cs
@@ -98,12 +98,14 @@ namespace SimpleApp
private LLUUID myID = LLUUID.Random();
public MyNpcCharacter( EventManager eventManager )
{
+ // startPos = new LLVector3(128, (float)(Util.RandomClass.NextDouble()*100), 2);
eventManager.OnFrame += Update;
}
+ private LLVector3 startPos = new LLVector3(128, 128,2);
public virtual LLVector3 StartPos
{
- get { return new LLVector3(128, 100, 2); }
+ get { return startPos; }
set { }
}
@@ -122,9 +124,10 @@ namespace SimpleApp
get { return "Annoying"; }
}
+ private string lastName = "NPC" + Util.RandomClass.Next(1, 1000);
public virtual string LastName
{
- get { return "NPC"; }
+ get { return lastName; }
}
public virtual void OutPacket(Packet newPack) { }
@@ -203,7 +206,7 @@ namespace SimpleApp
flyState = 0;
}
- if (count >= 40)
+ if (count >= 200)
{
if (OnChatFromViewer != null)
{
diff --git a/OpenSim/Region/Examples/SimpleApp/Program.cs b/OpenSim/Region/Examples/SimpleApp/Program.cs
index a1d331d458..52e279b82d 100644
--- a/OpenSim/Region/Examples/SimpleApp/Program.cs
+++ b/OpenSim/Region/Examples/SimpleApp/Program.cs
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Generic;
using System.Net;
using libsecondlife;
using OpenSim.Framework;
@@ -22,6 +23,7 @@ namespace SimpleApp
{
class Program : RegionApplicationBase, conscmd_callback
{
+ private ModuleLoader m_moduleLoader;
protected override LogBase CreateLog()
{
return new LogBase(null, "SimpleApp", this, false);
@@ -59,8 +61,19 @@ namespace SimpleApp
UDPServer udpServer;
+ m_moduleLoader = new ModuleLoader();
+ m_moduleLoader.LoadDefaultSharedModules("");
+
Scene scene = SetupScene(regionInfo, out udpServer);
+
+ m_moduleLoader.InitialiseSharedModules(scene);
+ m_moduleLoader.CreateDefaultModules(scene, "");
+ scene.SetModuleInterfaces();
+
scene.StartTimer();
+
+ m_moduleLoader.PostInitialise();
+ m_moduleLoader.ClearCache();
udpServer.ServerListener();
@@ -75,10 +88,21 @@ namespace SimpleApp
ComplexObject complexObject = new ComplexObject(scene, regionInfo.RegionHandle, LLUUID.Zero, scene.PrimIDAllocate(), pos + posOffset );
scene.AddEntity(complexObject);
}
-
- MyNpcCharacter m_character = new MyNpcCharacter(scene.EventManager);
- scene.AddNewClient(m_character, false);
+
+ /*for (int i = 0; i < 500; i++)
+ {
+ MyNpcCharacter m_character = new MyNpcCharacter(scene.EventManager);
+ scene.AddNewClient(m_character, false);
+ }
+
+ List avatars = scene.RequestAvatarList();
+ foreach (ScenePresence avatar in avatars)
+ {
+ avatar.AbsolutePosition = new LLVector3((float)OpenSim.Framework.Utilities.Util.RandomClass.Next(100,200), (float)OpenSim.Framework.Utilities.Util.RandomClass.Next(30, 200), 2);
+
+ }*/
+
DirectoryInfo dirInfo = new DirectoryInfo( "." );
float x = 0;
diff --git a/OpenSim/Region/ExtensionsScriptModule/ScriptManager.cs b/OpenSim/Region/ExtensionsScriptModule/ScriptManager.cs
index 6cacf0c0cc..fd59fd3dbc 100644
--- a/OpenSim/Region/ExtensionsScriptModule/ScriptManager.cs
+++ b/OpenSim/Region/ExtensionsScriptModule/ScriptManager.cs
@@ -58,7 +58,7 @@ namespace OpenSim.Region.ExtensionsScriptModule
{
// Default Engines
CSharpScriptEngine csharpCompiler = new CSharpScriptEngine();
- compilers.Add(csharpCompiler.FileExt(),csharpCompiler);
+ compilers.Add(csharpCompiler.FileExt(), csharpCompiler);
JScriptEngine jscriptCompiler = new JScriptEngine();
compilers.Add(jscriptCompiler.FileExt(), jscriptCompiler);
@@ -72,8 +72,8 @@ namespace OpenSim.Region.ExtensionsScriptModule
System.Console.WriteLine("Initialising Extensions Scripting Module");
m_scene = scene;
- m_scene.RegisterAPIMethod("API_CompileExtensionScript", new ModuleAPIMethod1(Compile));
- m_scene.RegisterAPIMethod("API_AddExtensionScript", new ModuleAPIMethod1(AddPreCompiledScript));
+ m_scene.RegisterAPIMethod("API_CompileExtensionScript", new ModuleAPIMethod1(Compile));
+ m_scene.RegisterAPIMethod("API_AddExtensionScript", new ModuleAPIMethod1(AddPreCompiledScript));
}
public void PostInitialise()
@@ -91,6 +91,11 @@ namespace OpenSim.Region.ExtensionsScriptModule
return "ExtensionsScriptingModule";
}
+ public bool IsSharedModule()
+ {
+ return false;
+ }
+
public bool Compile(string filename)
{
foreach (KeyValuePair compiler in compilers)
@@ -121,7 +126,7 @@ namespace OpenSim.Region.ExtensionsScriptModule
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.
script.Initialise(scriptInfo);
scripts.Add(script);
@@ -132,7 +137,7 @@ namespace OpenSim.Region.ExtensionsScriptModule
interface IScriptCompiler
{
- Dictionary compile(string filename);
+ Dictionary compile(string filename);
string FileExt();
}
}
diff --git a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands_Interface.cs b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands_Interface.cs
index f80898b547..a7cce9fd0e 100644
--- a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands_Interface.cs
+++ b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands_Interface.cs
@@ -628,5 +628,8 @@ namespace OpenSim.Region.ScriptEngine.Common
int llGetParcelMaxPrims(LSL_Types.Vector3 pos, int sim_wide);
//wiki list llGetParcelDetails(vector pos, list params)
List llGetParcelDetails(LSL_Types.Vector3 pos, List param);
+
+ //OpenSim functions
+ string osSetDynamicTextureURL(string dynamicID, string contentType, string url, string extraParams, int timer);
}
}
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/LSL2CSConverter.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/LSL2CSConverter.cs
index 3b7bd7b4a9..94958889bd 100644
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/LSL2CSConverter.cs
+++ b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/LSL2CSConverter.cs
@@ -25,10 +25,7 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL
DataTypes.Add("null", "null");
}
-
-
-
-
+
public string Convert(string Script)
{
string Return = "";
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/LSL_BaseClass.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/LSL_BaseClass.cs
index 90004b5c77..63f7260ac6 100644
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/LSL_BaseClass.cs
+++ b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/LSL_BaseClass.cs
@@ -465,8 +465,10 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL
public int llGetParcelMaxPrims(LSL_Types.Vector3 pos, int sim_wide) { return m_LSL_Functions.llGetParcelMaxPrims(pos, sim_wide); }
public List llGetParcelDetails(LSL_Types.Vector3 pos, List param) { return m_LSL_Functions.llGetParcelDetails(pos, param); }
-
-
+ //
+ // OpenSim Functions
+ //
+ public string osSetDynamicTextureURL(string dynamicID, string contentType, string url, string extraParams, int timer) { return m_LSL_Functions.osSetDynamicTextureURL(dynamicID, contentType, url, extraParams, timer); }
// LSL CONSTANTS
public const int TRUE = 1;
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/Server_API/LSL_BuiltIn_Commands.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/Server_API/LSL_BuiltIn_Commands.cs
index 493a063410..5d34229948 100644
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/Server_API/LSL_BuiltIn_Commands.cs
+++ b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/Server_API/LSL_BuiltIn_Commands.cs
@@ -4,6 +4,7 @@ using System.Text;
using libsecondlife;
using OpenSim.Region.Environment.Scenes;
using OpenSim.Region.Environment.Scenes.Scripting;
+using OpenSim.Region.Environment.Interfaces;
using OpenSim.Region.ScriptEngine.DotNetEngine.Compiler;
using OpenSim.Region.ScriptEngine.Common;
using OpenSim.Framework.Console;
@@ -650,6 +651,24 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler
public int llGetParcelMaxPrims(LSL_Types.Vector3 pos, int sim_wide) { return 0; }
public List llGetParcelDetails(LSL_Types.Vector3 pos, List param) { return new List(); }
+ //
+ // OpenSim functions
+ //
+ public string osSetDynamicTextureURL(string dynamicID, string contentType, string url, string extraParams, int timer)
+ {
+ if (dynamicID == "")
+ {
+ IDynamicTextureManager textureManager = this.World.RequestModuleInterface();
+ LLUUID createdTexture = textureManager.AddDynamicTextureURL(World.RegionInfo.SimUUID, this.m_host.UUID, contentType, url, extraParams, timer);
+ return createdTexture.ToStringHyphenated();
+ }
+ else
+ {
+ //TODO update existing dynamic textures
+ }
+
+ return LLUUID.Zero.ToStringHyphenated();
+ }
}
}