Some work on Module loading/management.
Some more modules templates classes (hoping that someone will pick some of these and work on implementing them). Early version of the "Dynamic Texture Module", although currently there are no render modules included (so not really functional without them). Added osSetDynamicTextureURL script function, for attaching a dynamic texture to a prim. Some work on the console command handling. Added "change-region <regionname>" and "exit-region" so that after the use of change-region, the commands entered will apply to that region only. Then use exit-region to return to the top level (so commands then function as they did before and either apply to all regions or to the first region) (Note: this hasn't been tested very much)afrisby
parent
94b1d3c128
commit
bfd36e2e83
|
@ -151,7 +151,7 @@ namespace OpenSim.Framework.Communications.Caches
|
||||||
|
|
||||||
public void AddAsset(AssetBase asset)
|
public void AddAsset(AssetBase asset)
|
||||||
{
|
{
|
||||||
// Console.WriteLine("adding asset " + asset.FullID.ToStringHyphenated());
|
System.Console.WriteLine("adding asset " + asset.FullID.ToStringHyphenated());
|
||||||
if (asset.Type == 0)
|
if (asset.Type == 0)
|
||||||
{
|
{
|
||||||
//Console.WriteLine("which is a texture");
|
//Console.WriteLine("which is a texture");
|
||||||
|
@ -161,6 +161,11 @@ namespace OpenSim.Framework.Communications.Caches
|
||||||
this.Textures.Add(textur.FullID, textur);
|
this.Textures.Add(textur.FullID, textur);
|
||||||
this._assetServer.UploadNewAsset(asset);
|
this._assetServer.UploadNewAsset(asset);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TextureImage textur = new TextureImage(asset);
|
||||||
|
this.Textures[asset.FullID] = textur;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -45,6 +45,7 @@ using OpenSim.Region.Communications.Local;
|
||||||
using OpenSim.Region.Communications.OGS1;
|
using OpenSim.Region.Communications.OGS1;
|
||||||
using OpenSim.Framework.Communications.Caches;
|
using OpenSim.Framework.Communications.Caches;
|
||||||
using OpenSim.Region.Environment.Scenes;
|
using OpenSim.Region.Environment.Scenes;
|
||||||
|
using OpenSim.Region.Environment.Modules;
|
||||||
using OpenSim.Region.Environment;
|
using OpenSim.Region.Environment;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
@ -77,11 +78,17 @@ namespace OpenSim
|
||||||
private string m_logFilename = ("region-console.log");
|
private string m_logFilename = ("region-console.log");
|
||||||
private bool m_permissions = false;
|
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 bool standaloneAuthenticate = false;
|
||||||
private string standaloneWelcomeMessage = null;
|
private string standaloneWelcomeMessage = null;
|
||||||
private string standaloneInventoryPlugin = "";
|
private string standaloneInventoryPlugin = "";
|
||||||
private string standaloneUserPlugin = "";
|
private string standaloneUserPlugin = "";
|
||||||
|
|
||||||
|
private Scene m_consoleRegion = null;
|
||||||
|
|
||||||
public ConsoleCommand CreateAccount = null;
|
public ConsoleCommand CreateAccount = null;
|
||||||
|
|
||||||
|
@ -104,12 +111,10 @@ namespace OpenSim
|
||||||
}
|
}
|
||||||
|
|
||||||
ReadConfigSettings(startupSource);
|
ReadConfigSettings(startupSource);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void ReadConfigSettings(IConfigSource configSource)
|
protected void ReadConfigSettings(IConfigSource configSource)
|
||||||
{
|
{
|
||||||
|
|
||||||
m_networkServersInfo = new NetworkServersInfo();
|
m_networkServersInfo = new NetworkServersInfo();
|
||||||
m_sandbox = !configSource.Configs["Startup"].GetBoolean("gridmode", false);
|
m_sandbox = !configSource.Configs["Startup"].GetBoolean("gridmode", false);
|
||||||
m_physicsEngine = configSource.Configs["Startup"].GetString("physics", "basicphysics");
|
m_physicsEngine = configSource.Configs["Startup"].GetString("physics", "basicphysics");
|
||||||
|
@ -122,6 +127,11 @@ namespace OpenSim
|
||||||
|
|
||||||
m_scriptEngine = configSource.Configs["Startup"].GetString("script_engine", "DotNetEngine");
|
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);
|
standaloneAuthenticate = configSource.Configs["StandAlone"].GetBoolean("accounts_authenticate", false);
|
||||||
standaloneWelcomeMessage = configSource.Configs["StandAlone"].GetString("welcome_message", "Welcome to OpenSim");
|
standaloneWelcomeMessage = configSource.Configs["StandAlone"].GetString("welcome_message", "Welcome to OpenSim");
|
||||||
standaloneInventoryPlugin = configSource.Configs["StandAlone"].GetString("inventory_plugin", "OpenSim.Framework.Data.SQLite.dll");
|
standaloneInventoryPlugin = configSource.Configs["StandAlone"].GetString("inventory_plugin", "OpenSim.Framework.Data.SQLite.dll");
|
||||||
|
@ -178,6 +188,8 @@ namespace OpenSim
|
||||||
}
|
}
|
||||||
|
|
||||||
m_moduleLoader = new ModuleLoader();
|
m_moduleLoader = new ModuleLoader();
|
||||||
|
MainLog.Instance.Verbose("Loading Shared Modules");
|
||||||
|
m_moduleLoader.LoadDefaultSharedModules(m_exceptSharedModules);
|
||||||
|
|
||||||
// Load all script engines found
|
// Load all script engines found
|
||||||
OpenSim.Region.Environment.Scenes.Scripting.ScriptEngineLoader ScriptEngineLoader = new OpenSim.Region.Environment.Scenes.Scripting.ScriptEngineLoader(m_log);
|
OpenSim.Region.Environment.Scenes.Scripting.ScriptEngineLoader ScriptEngineLoader = new OpenSim.Region.Environment.Scenes.Scripting.ScriptEngineLoader(m_log);
|
||||||
|
@ -191,6 +203,10 @@ namespace OpenSim
|
||||||
UDPServer udpServer;
|
UDPServer udpServer;
|
||||||
Scene scene = SetupScene(regionInfo, out 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
|
// Check if we have a script engine to load
|
||||||
if (m_scriptEngine != null && m_scriptEngine != "")
|
if (m_scriptEngine != null && m_scriptEngine != "")
|
||||||
|
@ -211,6 +227,9 @@ namespace OpenSim
|
||||||
m_regionData.Add(regionInfo);
|
m_regionData.Add(regionInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_moduleLoader.PostInitialise();
|
||||||
|
m_moduleLoader.ClearCache();
|
||||||
|
|
||||||
// Start UDP servers
|
// Start UDP servers
|
||||||
for (int i = 0; i < m_udpServers.Count; i++)
|
for (int i = 0; i < m_udpServers.Count; i++)
|
||||||
{
|
{
|
||||||
|
@ -352,135 +371,154 @@ namespace OpenSim
|
||||||
/// <param name="cmdparams">Additional arguments passed to the command</param>
|
/// <param name="cmdparams">Additional arguments passed to the command</param>
|
||||||
public void RunCmd(string command, string[] cmdparams)
|
public void RunCmd(string command, string[] cmdparams)
|
||||||
{
|
{
|
||||||
switch (command)
|
if ((m_consoleRegion == null) || (command == "exit-region"))
|
||||||
{
|
{
|
||||||
case "help":
|
switch (command)
|
||||||
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.");
|
case "help":
|
||||||
m_log.Error(" alert general [Message] - send an alert to all users.");
|
m_log.Error("alert - send alert to a designated user or all users.");
|
||||||
m_log.Error("backup - trigger a simulator backup");
|
m_log.Error(" alert [First] [Last] [Message] - send an alert to a user. Case sensitive.");
|
||||||
m_log.Error("load-xml [filename] - load prims from XML");
|
m_log.Error(" alert general [Message] - send an alert to all users.");
|
||||||
m_log.Error("save-xml [filename] - save prims to XML");
|
m_log.Error("backup - trigger a simulator backup");
|
||||||
m_log.Error("script - manually trigger scripts? or script commands?");
|
m_log.Error("load-xml [filename] - load prims from XML");
|
||||||
m_log.Error("show uptime - show simulator startup and uptime.");
|
m_log.Error("save-xml [filename] - save prims to XML");
|
||||||
m_log.Error("show users - show info about connected users.");
|
m_log.Error("script - manually trigger scripts? or script commands?");
|
||||||
m_log.Error("shutdown - disconnect all clients and shutdown.");
|
m_log.Error("show uptime - show simulator startup and uptime.");
|
||||||
m_log.Error("terrain help - show help for terrain commands.");
|
m_log.Error("show users - show info about connected users.");
|
||||||
m_log.Error("quit - equivalent to shutdown.");
|
m_log.Error("shutdown - disconnect all clients and shutdown.");
|
||||||
break;
|
m_log.Error("terrain help - show help for terrain commands.");
|
||||||
|
m_log.Error("quit - equivalent to shutdown.");
|
||||||
|
break;
|
||||||
|
|
||||||
case "show":
|
case "show":
|
||||||
if (cmdparams.Length > 0)
|
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))
|
|
||||||
{
|
{
|
||||||
m_log.Error(result);
|
Show(cmdparams[0]);
|
||||||
}
|
}
|
||||||
}
|
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);
|
|
||||||
|
|
||||||
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;
|
||||||
break;
|
case "terrain-sim":
|
||||||
case "script":
|
string result2 = "";
|
||||||
foreach (Scene scene in m_localScenes)
|
foreach (Scene scene in m_localScenes)
|
||||||
{
|
{
|
||||||
scene.SendCommandToScripts(cmdparams);
|
if (scene.RegionInfo.RegionName.ToLower() == cmdparams[0].ToLower())
|
||||||
}
|
{
|
||||||
break;
|
string[] tmpCmdparams = new string[cmdparams.Length - 1];
|
||||||
|
cmdparams.CopyTo(tmpCmdparams, 1);
|
||||||
|
|
||||||
case "command-script":
|
if (!scene.Terrain.RunTerrainCmd(tmpCmdparams, ref result2, scene.RegionInfo.RegionName))
|
||||||
if (cmdparams.Length > 0)
|
{
|
||||||
{
|
m_log.Error(result2);
|
||||||
RunCommandScript(cmdparams[0]);
|
}
|
||||||
}
|
}
|
||||||
break;
|
}
|
||||||
|
break;
|
||||||
|
case "script":
|
||||||
|
foreach (Scene scene in m_localScenes)
|
||||||
|
{
|
||||||
|
scene.SendCommandToScripts(cmdparams);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case "permissions":
|
case "command-script":
|
||||||
// Treats each user as a super-admin when disabled
|
if (cmdparams.Length > 0)
|
||||||
foreach (Scene scene in m_localScenes)
|
{
|
||||||
{
|
RunCommandScript(cmdparams[0]);
|
||||||
if (Convert.ToBoolean(cmdparams[0]))
|
}
|
||||||
scene.PermissionsMngr.EnablePermissions();
|
break;
|
||||||
else
|
|
||||||
scene.PermissionsMngr.DisablePermissions();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "backup":
|
case "permissions":
|
||||||
foreach (Scene scene in m_localScenes)
|
// Treats each user as a super-admin when disabled
|
||||||
{
|
foreach (Scene scene in m_localScenes)
|
||||||
scene.Backup();
|
{
|
||||||
}
|
if (Convert.ToBoolean(cmdparams[0]))
|
||||||
break;
|
scene.PermissionsMngr.EnablePermissions();
|
||||||
|
else
|
||||||
|
scene.PermissionsMngr.DisablePermissions();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case "alert":
|
case "backup":
|
||||||
foreach (Scene scene in m_localScenes)
|
foreach (Scene scene in m_localScenes)
|
||||||
{
|
{
|
||||||
scene.HandleAlertCommand(cmdparams);
|
scene.Backup();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "create":
|
case "alert":
|
||||||
if (CreateAccount != null)
|
foreach (Scene scene in m_localScenes)
|
||||||
{
|
{
|
||||||
CreateAccount(cmdparams);
|
scene.HandleAlertCommand(cmdparams);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "set-time":
|
case "create":
|
||||||
break;
|
if (CreateAccount != null)
|
||||||
|
{
|
||||||
|
CreateAccount(cmdparams);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case "quit":
|
case "quit":
|
||||||
case "shutdown":
|
case "shutdown":
|
||||||
Shutdown();
|
Shutdown();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
case "change-region":
|
||||||
m_log.Error("Unknown command");
|
foreach (Scene scene in m_localScenes)
|
||||||
break;
|
{
|
||||||
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
|
@ -10,5 +10,6 @@ namespace OpenSim.Region.Environment.Interfaces
|
||||||
void PostInitialise();
|
void PostInitialise();
|
||||||
void CloseDown();
|
void CloseDown();
|
||||||
string GetName();
|
string GetName();
|
||||||
|
bool IsSharedModule();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
|
@ -14,37 +14,51 @@ namespace OpenSim.Region.Environment
|
||||||
|
|
||||||
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 ModuleLoader()
|
public ModuleLoader()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Really just a test method for loading a set of currently internal modules
|
/// Should have a module factory?
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="scene"></param>
|
/// <param name="scene"></param>
|
||||||
public void CreateDefaultModules(Scene scene)
|
public void CreateDefaultModules(Scene scene, string exceptModules)
|
||||||
{
|
{
|
||||||
//Testing IRegionModule ideas
|
|
||||||
XferModule xferManager = new XferModule();
|
XferModule xferManager = new XferModule();
|
||||||
xferManager.Initialise(scene);
|
xferManager.Initialise(scene);
|
||||||
scene.AddModule(xferManager.GetName(), xferManager);
|
scene.AddModule(xferManager.GetName(), xferManager);
|
||||||
|
LoadedModules.Add(xferManager);
|
||||||
|
|
||||||
ChatModule chatModule = new ChatModule();
|
ChatModule chatModule = new ChatModule();
|
||||||
chatModule.Initialise(scene);
|
chatModule.Initialise(scene);
|
||||||
scene.AddModule(chatModule.GetName(), chatModule);
|
scene.AddModule(chatModule.GetName(), chatModule);
|
||||||
|
LoadedModules.Add(chatModule);
|
||||||
|
|
||||||
AvatarProfilesModule avatarProfiles = new AvatarProfilesModule();
|
AvatarProfilesModule avatarProfiles = new AvatarProfilesModule();
|
||||||
avatarProfiles.Initialise(scene);
|
avatarProfiles.Initialise(scene);
|
||||||
scene.AddModule(avatarProfiles.GetName(), avatarProfiles);
|
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
|
public void LoadDefaultSharedModules(string exceptModules)
|
||||||
// but should rather be in a separate method that is called after all modules are loaded/created/intialised
|
{
|
||||||
xferManager.PostInitialise();
|
DynamicTextureModule dynamicModule = new DynamicTextureModule();
|
||||||
// chatModule.PostInitialise(); //for now leave this disabled as it would start up a partially working irc bot
|
this.LoadedSharedModules.Add(dynamicModule.GetName(), dynamicModule);
|
||||||
avatarProfiles.PostInitialise();
|
}
|
||||||
|
|
||||||
|
public void InitialiseSharedModules(Scene scene)
|
||||||
|
{
|
||||||
|
foreach (IRegionModule module in this.LoadedSharedModules.Values)
|
||||||
|
{
|
||||||
|
module.Initialise(scene);
|
||||||
|
scene.AddModule(module.GetName(), module); //should be doing this?
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -53,18 +67,33 @@ namespace OpenSim.Region.Environment
|
||||||
/// <param name="dllName"></param>
|
/// <param name="dllName"></param>
|
||||||
/// <param name="moduleName"></param>
|
/// <param name="moduleName"></param>
|
||||||
/// <param name="scene"></param>
|
/// <param name="scene"></param>
|
||||||
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 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.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="dllName"></param>
|
/// <param name="dllName"></param>
|
||||||
/// <param name="moduleName"></param>
|
/// <param name="moduleName"></param>
|
||||||
/// <param name="scene"></param>
|
/// <param name="scene"></param>
|
||||||
public void LoadModule(string dllName, string moduleName, Scene scene)
|
public IRegionModule LoadModule(string dllName, string moduleName)
|
||||||
{
|
{
|
||||||
Assembly pluginAssembly = null;
|
Assembly pluginAssembly = null;
|
||||||
if (LoadedAssemblys.ContainsKey(dllName))
|
if (LoadedAssemblys.ContainsKey(dllName))
|
||||||
|
@ -97,13 +126,26 @@ namespace OpenSim.Region.Environment
|
||||||
}
|
}
|
||||||
pluginAssembly = null;
|
pluginAssembly = null;
|
||||||
|
|
||||||
if (module.GetName() == moduleName)
|
if ((module != null ) || (module.GetName() == moduleName))
|
||||||
{
|
{
|
||||||
module.Initialise(scene);
|
return module;
|
||||||
scene.AddModule(moduleName, module);
|
|
||||||
module.PostInitialise(); //shouldn't be done here
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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()
|
public void ClearCache()
|
||||||
|
|
|
@ -38,6 +38,11 @@ namespace OpenSim.Region.Environment.Modules
|
||||||
return "AssetDownloadModule";
|
return "AssetDownloadModule";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool IsSharedModule()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public void NewClient(IClientAPI client)
|
public void NewClient(IClientAPI client)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,11 +39,21 @@ namespace OpenSim.Region.Environment.Modules
|
||||||
return "AvatarProfilesModule";
|
return "AvatarProfilesModule";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool IsSharedModule()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public void NewClient(IClientAPI client)
|
public void NewClient(IClientAPI client)
|
||||||
{
|
{
|
||||||
client.OnRequestAvatarProperties += RequestAvatarProperty;
|
client.OnRequestAvatarProperties += RequestAvatarProperty;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void RemoveClient(IClientAPI client)
|
||||||
|
{
|
||||||
|
client.OnRequestAvatarProperties -= RequestAvatarProperty;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -14,7 +14,7 @@ using OpenSim.Framework.Console;
|
||||||
|
|
||||||
namespace OpenSim.Region.Environment.Modules
|
namespace OpenSim.Region.Environment.Modules
|
||||||
{
|
{
|
||||||
public class ChatModule : IRegionModule
|
public class ChatModule : IRegionModule, ISimChat
|
||||||
{
|
{
|
||||||
private Scene m_scene;
|
private Scene m_scene;
|
||||||
|
|
||||||
|
@ -45,11 +45,12 @@ namespace OpenSim.Region.Environment.Modules
|
||||||
m_scene = scene;
|
m_scene = scene;
|
||||||
m_scene.EventManager.OnNewClient += NewClient;
|
m_scene.EventManager.OnNewClient += NewClient;
|
||||||
|
|
||||||
//should register a optional API Method, so other modules can send chat messages using this module
|
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);
|
||||||
|
@ -75,6 +76,7 @@ namespace OpenSim.Region.Environment.Modules
|
||||||
{
|
{
|
||||||
Console.WriteLine(e.ToString());
|
Console.WriteLine(e.ToString());
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
public void CloseDown()
|
public void CloseDown()
|
||||||
|
@ -89,6 +91,11 @@ namespace OpenSim.Region.Environment.Modules
|
||||||
return "ChatModule";
|
return "ChatModule";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool IsSharedModule()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public void NewClient(IClientAPI client)
|
public void NewClient(IClientAPI client)
|
||||||
{
|
{
|
||||||
client.OnChatFromViewer += SimChat;
|
client.OnChatFromViewer += SimChat;
|
||||||
|
|
|
@ -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<LLUUID, Scene> RegisteredScenes = new Dictionary<LLUUID, Scene>();
|
||||||
|
private Dictionary<string, IDynamicTextureRender> RenderPlugins= new Dictionary<string, IDynamicTextureRender>();
|
||||||
|
private Dictionary<LLUUID, DynamicTextureUpdater> Updaters = new Dictionary<LLUUID, DynamicTextureUpdater>();
|
||||||
|
|
||||||
|
public void Initialise(Scene scene)
|
||||||
|
{
|
||||||
|
if (!RegisteredScenes.ContainsKey(scene.RegionInfo.SimUUID))
|
||||||
|
{
|
||||||
|
RegisteredScenes.Add(scene.RegionInfo.SimUUID, scene);
|
||||||
|
scene.RegisterModuleInterface<IDynamicTextureManager>(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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace OpenSim.Region.Environment.Modules
|
||||||
|
{
|
||||||
|
class EmailModule
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
|
@ -31,5 +31,10 @@ namespace OpenSim.Region.Environment.Modules
|
||||||
{
|
{
|
||||||
return "FriendsModule";
|
return "FriendsModule";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool IsSharedModule()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,11 @@ namespace OpenSim.Region.Environment.Modules
|
||||||
{
|
{
|
||||||
return "GroupsModule";
|
return "GroupsModule";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool IsSharedModule()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,5 +31,10 @@ namespace OpenSim.Region.Environment.Modules
|
||||||
{
|
{
|
||||||
return "InstantMessageModule";
|
return "InstantMessageModule";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool IsSharedModule()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,5 +31,10 @@ namespace OpenSim.Region.Environment.Modules
|
||||||
{
|
{
|
||||||
return "InventoryModule";
|
return "InventoryModule";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool IsSharedModule()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace OpenSim.Region.Environment.Modules
|
||||||
|
{
|
||||||
|
class ScriptsHttpRequests
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace OpenSim.Region.Environment.Modules
|
||||||
|
{
|
||||||
|
class TeleportModule
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
|
@ -37,6 +37,11 @@ namespace OpenSim.Region.Environment.Modules
|
||||||
return "TextureDownloadModule";
|
return "TextureDownloadModule";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool IsSharedModule()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public void NewClient(IClientAPI client)
|
public void NewClient(IClientAPI client)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,6 +45,11 @@ namespace OpenSim.Region.Environment.Modules
|
||||||
return "XferModule";
|
return "XferModule";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool IsSharedModule()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public void NewClient(IClientAPI client)
|
public void NewClient(IClientAPI client)
|
||||||
{
|
{
|
||||||
client.OnRequestXfer += RequestXfer;
|
client.OnRequestXfer += RequestXfer;
|
||||||
|
|
|
@ -35,6 +35,7 @@ using OpenSim.Framework.Types;
|
||||||
using OpenSim.Framework.Communications.Caches;
|
using OpenSim.Framework.Communications.Caches;
|
||||||
using OpenSim.Framework.Data;
|
using OpenSim.Framework.Data;
|
||||||
using OpenSim.Framework.Utilities;
|
using OpenSim.Framework.Utilities;
|
||||||
|
using OpenSim.Region.Environment.Interfaces;
|
||||||
|
|
||||||
namespace OpenSim.Region.Environment.Scenes
|
namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
|
@ -94,7 +95,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Should be removed soon as the Chat modules should take over this function
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="message"></param>
|
/// <param name="message"></param>
|
||||||
/// <param name="type"></param>
|
/// <param name="type"></param>
|
||||||
|
@ -103,56 +104,10 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
/// <param name="fromAgentID"></param>
|
/// <param name="fromAgentID"></param>
|
||||||
public void SimChat(byte[] message, byte type, LLVector3 fromPos, string fromName, LLUUID fromAgentID)
|
public void SimChat(byte[] message, byte type, LLVector3 fromPos, string fromName, LLUUID fromAgentID)
|
||||||
{
|
{
|
||||||
ScenePresence avatar = null;
|
if (m_simChatModule != null)
|
||||||
if (this.Avatars.ContainsKey(fromAgentID))
|
|
||||||
{
|
{
|
||||||
avatar = this.Avatars[fromAgentID];
|
m_simChatModule.SimChat(message, type, fromPos, fromName, fromAgentID);
|
||||||
fromPos = avatar.AbsolutePosition;
|
|
||||||
fromName = avatar.Firstname + " " + avatar.Lastname;
|
|
||||||
avatar = null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -78,19 +78,22 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
protected StorageManager storageManager;
|
protected StorageManager storageManager;
|
||||||
protected AgentCircuitManager authenticateHandler;
|
protected AgentCircuitManager authenticateHandler;
|
||||||
protected RegionCommsListener regionCommsHost;
|
protected RegionCommsListener regionCommsHost;
|
||||||
protected CommunicationsManager commsManager;
|
public CommunicationsManager commsManager;
|
||||||
// protected XferManager xferManager;
|
// protected XferManager xferManager;
|
||||||
|
|
||||||
protected Dictionary<LLUUID, Caps> capsHandlers = new Dictionary<LLUUID, Caps>();
|
protected Dictionary<LLUUID, Caps> capsHandlers = new Dictionary<LLUUID, Caps>();
|
||||||
protected BaseHttpServer httpListener;
|
protected BaseHttpServer httpListener;
|
||||||
|
|
||||||
protected Dictionary<string, IRegionModule> Modules = new Dictionary<string, IRegionModule>();
|
protected Dictionary<string, IRegionModule> Modules = new Dictionary<string, IRegionModule>();
|
||||||
protected Dictionary<string, object> APIMethods = new Dictionary<string, object>();
|
public Dictionary<Type, object> ModuleInterfaces = new Dictionary<Type, object>();
|
||||||
|
protected Dictionary<string, object> ModuleAPIMethods = new Dictionary<string, object>();
|
||||||
|
|
||||||
//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
|
// this most likely shouldn't be handled as a API method like this, but doing it for testing purposes
|
||||||
public ModuleAPIMethod2<bool, string, byte[]>AddXferFile = null;
|
public ModuleAPIMethod2<bool, string, byte[]> AddXferFile = null;
|
||||||
|
|
||||||
|
private ISimChat m_simChatModule = null;
|
||||||
|
|
||||||
#region Properties
|
#region Properties
|
||||||
|
|
||||||
|
@ -169,9 +172,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
m_eventManager = new EventManager();
|
m_eventManager = new EventManager();
|
||||||
m_permissionManager = new PermissionManager(this);
|
m_permissionManager = new PermissionManager(this);
|
||||||
|
|
||||||
MainLog.Instance.Verbose("Loading Region Modules");
|
|
||||||
m_moduleLoader.CreateDefaultModules(this);
|
|
||||||
|
|
||||||
m_eventManager.OnParcelPrimCountAdd +=
|
m_eventManager.OnParcelPrimCountAdd +=
|
||||||
m_LandManager.addPrimToLandPrimCounts;
|
m_LandManager.addPrimToLandPrimCounts;
|
||||||
|
|
||||||
|
@ -189,13 +189,15 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
httpListener = httpServer;
|
httpListener = httpServer;
|
||||||
|
|
||||||
SetMethodDelegates();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
private void SetMethodDelegates()
|
public void SetModuleInterfaces()
|
||||||
{
|
{
|
||||||
|
m_simChatModule = this.RequestModuleInterface<ISimChat>();
|
||||||
|
|
||||||
|
//should change so it uses the module interface functions
|
||||||
AddXferFile = (ModuleAPIMethod2<bool, string, byte[]>)this.RequestAPIMethod("API_AddXferFile");
|
AddXferFile = (ModuleAPIMethod2<bool, string, byte[]>)this.RequestAPIMethod("API_AddXferFile");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -635,12 +637,12 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
//obj.RegenerateFullIDs();
|
//obj.RegenerateFullIDs();
|
||||||
AddEntity(obj);
|
AddEntity(obj);
|
||||||
|
|
||||||
SceneObjectPart rootPart = obj.GetChildPart(obj.UUID);
|
SceneObjectPart rootPart = obj.GetChildPart(obj.UUID);
|
||||||
rootPart.PhysActor = phyScene.AddPrim(
|
rootPart.PhysActor = phyScene.AddPrim(
|
||||||
new PhysicsVector(rootPart.AbsolutePosition.X, rootPart.AbsolutePosition.Y, rootPart.AbsolutePosition.Z),
|
new PhysicsVector(rootPart.AbsolutePosition.X, rootPart.AbsolutePosition.Y, rootPart.AbsolutePosition.Z),
|
||||||
new PhysicsVector(rootPart.Scale.X, rootPart.Scale.Y, rootPart.Scale.Z),
|
new PhysicsVector(rootPart.Scale.X, rootPart.Scale.Y, rootPart.Scale.Z),
|
||||||
new Axiom.Math.Quaternion(rootPart.RotationOffset.W, rootPart.RotationOffset.X,
|
new Axiom.Math.Quaternion(rootPart.RotationOffset.W, rootPart.RotationOffset.X,
|
||||||
rootPart.RotationOffset.Y, rootPart.RotationOffset.Z));
|
rootPart.RotationOffset.Y, rootPart.RotationOffset.Z));
|
||||||
primCount++;
|
primCount++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -692,7 +694,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
protected virtual void SubscribeToClientEvents(IClientAPI client)
|
protected virtual void SubscribeToClientEvents(IClientAPI client)
|
||||||
{
|
{
|
||||||
// client.OnStartAnim += StartAnimation;
|
// client.OnStartAnim += StartAnimation;
|
||||||
client.OnRegionHandShakeReply += SendLayerData;
|
client.OnRegionHandShakeReply += SendLayerData;
|
||||||
//remoteClient.OnRequestWearables += new GenericCall(this.GetInitialPrims);
|
//remoteClient.OnRequestWearables += new GenericCall(this.GetInitialPrims);
|
||||||
client.OnModifyTerrain += ModifyTerrain;
|
client.OnModifyTerrain += ModifyTerrain;
|
||||||
|
@ -742,7 +744,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
client.OnRezScript += RezScript;
|
client.OnRezScript += RezScript;
|
||||||
client.OnRemoveTaskItem += RemoveTaskInventory;
|
client.OnRemoveTaskItem += RemoveTaskInventory;
|
||||||
|
|
||||||
// client.OnRequestAvatarProperties += RequestAvatarProperty;
|
// client.OnRequestAvatarProperties += RequestAvatarProperty;
|
||||||
|
|
||||||
client.OnGrabObject += ProcessObjectGrab;
|
client.OnGrabObject += ProcessObjectGrab;
|
||||||
|
|
||||||
|
@ -1071,13 +1073,12 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
AgentCircuitData agent = remoteClient.RequestClientInfo();
|
AgentCircuitData agent = remoteClient.RequestClientInfo();
|
||||||
agent.BaseFolder = LLUUID.Zero;
|
agent.BaseFolder = LLUUID.Zero;
|
||||||
agent.InventoryFolder = LLUUID.Zero;
|
agent.InventoryFolder = LLUUID.Zero;
|
||||||
// agent.startpos = new LLVector3(128, 128, 70);
|
// agent.startpos = new LLVector3(128, 128, 70);
|
||||||
agent.startpos = position;
|
agent.startpos = position;
|
||||||
agent.child = true;
|
agent.child = true;
|
||||||
commsManager.InterRegion.InformRegionOfChildAgent(regionHandle, agent);
|
commsManager.InterRegion.InformRegionOfChildAgent(regionHandle, agent);
|
||||||
commsManager.InterRegion.ExpectAvatarCrossing(regionHandle, remoteClient.AgentId, position, false);
|
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();
|
AgentCircuitData circuitdata = remoteClient.RequestClientInfo();
|
||||||
string capsPath = Util.GetCapsURL(remoteClient.AgentId);
|
string capsPath = Util.GetCapsURL(remoteClient.AgentId);
|
||||||
remoteClient.SendRegionTeleport(regionHandle, 13, reg.ExternalEndPoint, 4, (1 << 4), capsPath);
|
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)
|
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)
|
public object RequestAPIMethod(string name)
|
||||||
{
|
{
|
||||||
if (this.APIMethods.ContainsKey(name))
|
if (this.ModuleAPIMethods.ContainsKey(name))
|
||||||
{
|
{
|
||||||
return APIMethods[name];
|
return ModuleAPIMethods[name];
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void RegisterModuleInterface<M>( M mod)
|
||||||
|
{
|
||||||
|
//Console.WriteLine("registering module interface " + typeof(M));
|
||||||
|
if (!this.ModuleInterfaces.ContainsKey(typeof(M)))
|
||||||
|
{
|
||||||
|
ModuleInterfaces.Add(typeof(M), mod);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public T RequestModuleInterface<T>()
|
||||||
|
{
|
||||||
|
if (ModuleInterfaces.ContainsKey(typeof(T)))
|
||||||
|
{
|
||||||
|
return (T)ModuleInterfaces[typeof(T)];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return default(T);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void SetTimePhase(int phase)
|
public void SetTimePhase(int phase)
|
||||||
{
|
{
|
||||||
m_timePhase = phase;
|
m_timePhase = phase;
|
||||||
|
@ -1205,6 +1228,49 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
#endregion
|
#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
|
#region Script Engine
|
||||||
private List<OpenSim.Region.Environment.Scenes.Scripting.ScriptEngineInterface> ScriptEngines = new List<OpenSim.Region.Environment.Scenes.Scripting.ScriptEngineInterface>();
|
private List<OpenSim.Region.Environment.Scenes.Scripting.ScriptEngineInterface> ScriptEngines = new List<OpenSim.Region.Environment.Scenes.Scripting.ScriptEngineInterface>();
|
||||||
public void AddScriptEngine(OpenSim.Region.Environment.Scenes.Scripting.ScriptEngineInterface ScriptEngine, LogBase m_logger)
|
public void AddScriptEngine(OpenSim.Region.Environment.Scenes.Scripting.ScriptEngineInterface ScriptEngine, LogBase m_logger)
|
||||||
|
@ -1248,5 +1314,22 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
return null;
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -98,12 +98,14 @@ namespace SimpleApp
|
||||||
private LLUUID myID = LLUUID.Random();
|
private LLUUID myID = LLUUID.Random();
|
||||||
public MyNpcCharacter( EventManager eventManager )
|
public MyNpcCharacter( EventManager eventManager )
|
||||||
{
|
{
|
||||||
|
// startPos = new LLVector3(128, (float)(Util.RandomClass.NextDouble()*100), 2);
|
||||||
eventManager.OnFrame += Update;
|
eventManager.OnFrame += Update;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private LLVector3 startPos = new LLVector3(128, 128,2);
|
||||||
public virtual LLVector3 StartPos
|
public virtual LLVector3 StartPos
|
||||||
{
|
{
|
||||||
get { return new LLVector3(128, 100, 2); }
|
get { return startPos; }
|
||||||
set { }
|
set { }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -122,9 +124,10 @@ namespace SimpleApp
|
||||||
get { return "Annoying"; }
|
get { return "Annoying"; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private string lastName = "NPC" + Util.RandomClass.Next(1, 1000);
|
||||||
public virtual string LastName
|
public virtual string LastName
|
||||||
{
|
{
|
||||||
get { return "NPC"; }
|
get { return lastName; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual void OutPacket(Packet newPack) { }
|
public virtual void OutPacket(Packet newPack) { }
|
||||||
|
@ -203,7 +206,7 @@ namespace SimpleApp
|
||||||
flyState = 0;
|
flyState = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (count >= 40)
|
if (count >= 200)
|
||||||
{
|
{
|
||||||
if (OnChatFromViewer != null)
|
if (OnChatFromViewer != null)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using libsecondlife;
|
using libsecondlife;
|
||||||
using OpenSim.Framework;
|
using OpenSim.Framework;
|
||||||
|
@ -22,6 +23,7 @@ namespace SimpleApp
|
||||||
{
|
{
|
||||||
class Program : RegionApplicationBase, conscmd_callback
|
class Program : RegionApplicationBase, conscmd_callback
|
||||||
{
|
{
|
||||||
|
private ModuleLoader m_moduleLoader;
|
||||||
protected override LogBase CreateLog()
|
protected override LogBase CreateLog()
|
||||||
{
|
{
|
||||||
return new LogBase(null, "SimpleApp", this, false);
|
return new LogBase(null, "SimpleApp", this, false);
|
||||||
|
@ -59,9 +61,20 @@ namespace SimpleApp
|
||||||
|
|
||||||
UDPServer udpServer;
|
UDPServer udpServer;
|
||||||
|
|
||||||
|
m_moduleLoader = new ModuleLoader();
|
||||||
|
m_moduleLoader.LoadDefaultSharedModules("");
|
||||||
|
|
||||||
Scene scene = SetupScene(regionInfo, out udpServer);
|
Scene scene = SetupScene(regionInfo, out udpServer);
|
||||||
|
|
||||||
|
m_moduleLoader.InitialiseSharedModules(scene);
|
||||||
|
m_moduleLoader.CreateDefaultModules(scene, "");
|
||||||
|
scene.SetModuleInterfaces();
|
||||||
|
|
||||||
scene.StartTimer();
|
scene.StartTimer();
|
||||||
|
|
||||||
|
m_moduleLoader.PostInitialise();
|
||||||
|
m_moduleLoader.ClearCache();
|
||||||
|
|
||||||
udpServer.ServerListener();
|
udpServer.ServerListener();
|
||||||
|
|
||||||
LLVector3 pos = new LLVector3(110, 129, 27);
|
LLVector3 pos = new LLVector3(110, 129, 27);
|
||||||
|
@ -76,8 +89,19 @@ namespace SimpleApp
|
||||||
scene.AddEntity(complexObject);
|
scene.AddEntity(complexObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
MyNpcCharacter m_character = new MyNpcCharacter(scene.EventManager);
|
/*for (int i = 0; i < 500; i++)
|
||||||
scene.AddNewClient(m_character, false);
|
{
|
||||||
|
MyNpcCharacter m_character = new MyNpcCharacter(scene.EventManager);
|
||||||
|
scene.AddNewClient(m_character, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<ScenePresence> 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( "." );
|
DirectoryInfo dirInfo = new DirectoryInfo( "." );
|
||||||
|
|
||||||
|
|
|
@ -58,7 +58,7 @@ namespace OpenSim.Region.ExtensionsScriptModule
|
||||||
{
|
{
|
||||||
// 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);
|
||||||
|
@ -72,8 +72,8 @@ namespace OpenSim.Region.ExtensionsScriptModule
|
||||||
System.Console.WriteLine("Initialising Extensions Scripting Module");
|
System.Console.WriteLine("Initialising Extensions Scripting Module");
|
||||||
m_scene = scene;
|
m_scene = scene;
|
||||||
|
|
||||||
m_scene.RegisterAPIMethod("API_CompileExtensionScript", new ModuleAPIMethod1<bool, string>(Compile));
|
m_scene.RegisterAPIMethod("API_CompileExtensionScript", new ModuleAPIMethod1<bool, string>(Compile));
|
||||||
m_scene.RegisterAPIMethod("API_AddExtensionScript", new ModuleAPIMethod1<bool, IScript>(AddPreCompiledScript));
|
m_scene.RegisterAPIMethod("API_AddExtensionScript", new ModuleAPIMethod1<bool, IScript>(AddPreCompiledScript));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void PostInitialise()
|
public void PostInitialise()
|
||||||
|
@ -91,6 +91,11 @@ namespace OpenSim.Region.ExtensionsScriptModule
|
||||||
return "ExtensionsScriptingModule";
|
return "ExtensionsScriptingModule";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool IsSharedModule()
|
||||||
|
{
|
||||||
|
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)
|
||||||
|
@ -132,7 +137,7 @@ namespace OpenSim.Region.ExtensionsScriptModule
|
||||||
|
|
||||||
interface IScriptCompiler
|
interface IScriptCompiler
|
||||||
{
|
{
|
||||||
Dictionary<string,IScript> compile(string filename);
|
Dictionary<string, IScript> compile(string filename);
|
||||||
string FileExt();
|
string FileExt();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -628,5 +628,8 @@ namespace OpenSim.Region.ScriptEngine.Common
|
||||||
int llGetParcelMaxPrims(LSL_Types.Vector3 pos, int sim_wide);
|
int llGetParcelMaxPrims(LSL_Types.Vector3 pos, int sim_wide);
|
||||||
//wiki list llGetParcelDetails(vector pos, list params)
|
//wiki list llGetParcelDetails(vector pos, list params)
|
||||||
List<string> llGetParcelDetails(LSL_Types.Vector3 pos, List<string> param);
|
List<string> llGetParcelDetails(LSL_Types.Vector3 pos, List<string> param);
|
||||||
|
|
||||||
|
//OpenSim functions
|
||||||
|
string osSetDynamicTextureURL(string dynamicID, string contentType, string url, string extraParams, int timer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,9 +26,6 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public string Convert(string Script)
|
public string Convert(string Script)
|
||||||
{
|
{
|
||||||
string Return = "";
|
string Return = "";
|
||||||
|
|
|
@ -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 int llGetParcelMaxPrims(LSL_Types.Vector3 pos, int sim_wide) { return m_LSL_Functions.llGetParcelMaxPrims(pos, sim_wide); }
|
||||||
public List<string> llGetParcelDetails(LSL_Types.Vector3 pos, List<string> param) { return m_LSL_Functions.llGetParcelDetails(pos, param); }
|
public List<string> llGetParcelDetails(LSL_Types.Vector3 pos, List<string> 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
|
// LSL CONSTANTS
|
||||||
public const int TRUE = 1;
|
public const int TRUE = 1;
|
||||||
|
|
|
@ -4,6 +4,7 @@ using System.Text;
|
||||||
using libsecondlife;
|
using libsecondlife;
|
||||||
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.ScriptEngine.DotNetEngine.Compiler;
|
using OpenSim.Region.ScriptEngine.DotNetEngine.Compiler;
|
||||||
using OpenSim.Region.ScriptEngine.Common;
|
using OpenSim.Region.ScriptEngine.Common;
|
||||||
using OpenSim.Framework.Console;
|
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 int llGetParcelMaxPrims(LSL_Types.Vector3 pos, int sim_wide) { return 0; }
|
||||||
public List<string> llGetParcelDetails(LSL_Types.Vector3 pos, List<string> param) { return new List<string>(); }
|
public List<string> llGetParcelDetails(LSL_Types.Vector3 pos, List<string> param) { return new List<string>(); }
|
||||||
|
|
||||||
|
//
|
||||||
|
// OpenSim functions
|
||||||
|
//
|
||||||
|
public string osSetDynamicTextureURL(string dynamicID, string contentType, string url, string extraParams, int timer)
|
||||||
|
{
|
||||||
|
if (dynamicID == "")
|
||||||
|
{
|
||||||
|
IDynamicTextureManager textureManager = this.World.RequestModuleInterface<IDynamicTextureManager>();
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue