From 2b60a5c5d64f38caf243119105416c1101c6eb6c Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Sat, 19 May 2012 02:45:17 +0100
Subject: Add is_megaregion flag into oar control file. Not currently read -
for future use. Please do not rely on this remaining here.
An adaptation of part of Garmin's patch from http://opensimulator.org/mantis/view.php?id=5975, thanks!
Flag only written if the SW corner OAR is saved - this is the only one that captures object data presently (though not land or terrain data).
This adds an IRegionCombinerModule interface and the necessary methods on RegionCombinerModule
---
.../Archiver/ArchiveWriteRequestPreparation.cs | 95 ++++++++++++++--------
.../CoreModules/World/Archiver/ArchiverModule.cs | 20 +++--
2 files changed, 74 insertions(+), 41 deletions(-)
(limited to 'OpenSim/Region/CoreModules')
diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs
index 5679ad5..838b741 100644
--- a/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs
+++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiveWriteRequestPreparation.cs
@@ -67,7 +67,8 @@ namespace OpenSim.Region.CoreModules.World.Archiver
/// Determine whether this archive will save assets. Default is true.
///
public bool SaveAssets { get; set; }
-
+
+ protected ArchiverModule m_module;
protected Scene m_scene;
protected Stream m_saveStream;
protected Guid m_requestId;
@@ -75,13 +76,13 @@ namespace OpenSim.Region.CoreModules.World.Archiver
///
/// Constructor
///
- ///
+ /// Calling module
/// The path to which to save data.
/// The id associated with this request
///
/// If there was a problem opening a stream for the file specified by the savePath
///
- public ArchiveWriteRequestPreparation(Scene scene, string savePath, Guid requestId) : this(scene, requestId)
+ public ArchiveWriteRequestPreparation(ArchiverModule module, string savePath, Guid requestId) : this(module, requestId)
{
try
{
@@ -99,17 +100,23 @@ namespace OpenSim.Region.CoreModules.World.Archiver
///
/// Constructor.
///
- ///
+ /// Calling module
/// The stream to which to save data.
/// The id associated with this request
- public ArchiveWriteRequestPreparation(Scene scene, Stream saveStream, Guid requestId) : this(scene, requestId)
+ public ArchiveWriteRequestPreparation(ArchiverModule module, Stream saveStream, Guid requestId) : this(module, requestId)
{
m_saveStream = saveStream;
}
- protected ArchiveWriteRequestPreparation(Scene scene, Guid requestId)
+ protected ArchiveWriteRequestPreparation(ArchiverModule module, Guid requestId)
{
- m_scene = scene;
+ m_module = module;
+
+ // FIXME: This is only here for regression test purposes since they do not supply a module. Need to fix
+ // this.
+ if (m_module != null)
+ m_scene = m_module.Scene;
+
m_requestId = requestId;
SaveAssets = true;
@@ -364,32 +371,56 @@ namespace OpenSim.Region.CoreModules.World.Archiver
//if (majorVersion == 1)
//{
// m_log.WarnFormat("[ARCHIVER]: Please be aware that version 1.0 OARs are not compatible with OpenSim 0.7.0.2 and earlier. Please use the --version=0 option if you want to produce a compatible OAR");
- //}
+ //}
+
+ String s;
- StringWriter sw = new StringWriter();
- XmlTextWriter xtw = new XmlTextWriter(sw);
- xtw.Formatting = Formatting.Indented;
- xtw.WriteStartDocument();
- xtw.WriteStartElement("archive");
- xtw.WriteAttributeString("major_version", majorVersion.ToString());
- xtw.WriteAttributeString("minor_version", minorVersion.ToString());
-
- xtw.WriteStartElement("creation_info");
- DateTime now = DateTime.UtcNow;
- TimeSpan t = now - new DateTime(1970, 1, 1);
- xtw.WriteElementString("datetime", ((int)t.TotalSeconds).ToString());
- xtw.WriteElementString("id", UUID.Random().ToString());
- xtw.WriteEndElement();
-
- xtw.WriteElementString("assets_included", SaveAssets.ToString());
-
- xtw.WriteEndElement();
-
- xtw.Flush();
- xtw.Close();
-
- String s = sw.ToString();
- sw.Close();
+ using (StringWriter sw = new StringWriter())
+ {
+ using (XmlTextWriter xtw = new XmlTextWriter(sw))
+ {
+ xtw.Formatting = Formatting.Indented;
+ xtw.WriteStartDocument();
+ xtw.WriteStartElement("archive");
+ xtw.WriteAttributeString("major_version", majorVersion.ToString());
+ xtw.WriteAttributeString("minor_version", minorVersion.ToString());
+
+ xtw.WriteStartElement("creation_info");
+ DateTime now = DateTime.UtcNow;
+ TimeSpan t = now - new DateTime(1970, 1, 1);
+ xtw.WriteElementString("datetime", ((int)t.TotalSeconds).ToString());
+ xtw.WriteElementString("id", UUID.Random().ToString());
+ xtw.WriteEndElement();
+
+ xtw.WriteElementString("assets_included", SaveAssets.ToString());
+
+ bool isMegaregion;
+
+ // FIXME: This is only here for regression test purposes since they do not supply a module. Need to fix
+ // this, possibly by doing control file creation somewhere else.
+ if (m_module != null && m_module.RegionCombinerModule != null)
+ {
+ IRegionCombinerModule mod = m_module.RegionCombinerModule;
+ isMegaregion = mod.IsMegaregion && mod.IsRootRegion(m_scene.RegionInfo.RegionID);
+ }
+ else
+ {
+ isMegaregion = false;
+ }
+
+ xtw.WriteElementString("is_megaregion", isMegaregion.ToString());
+
+ xtw.WriteEndElement();
+
+ xtw.Flush();
+ xtw.Close();
+ }
+
+ s = sw.ToString();
+ }
+
+// Console.WriteLine(
+// "[ARCHIVE WRITE REQUEST PREPARATION]: Control file for {0} is: {1}", m_scene.RegionInfo.RegionName, s);
return s;
}
diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiverModule.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiverModule.cs
index f5a5a8d..bf3b124 100644
--- a/OpenSim/Region/CoreModules/World/Archiver/ArchiverModule.cs
+++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiverModule.cs
@@ -45,7 +45,8 @@ namespace OpenSim.Region.CoreModules.World.Archiver
private static readonly ILog m_log =
LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
- private Scene m_scene;
+ public Scene Scene { get; private set; }
+ public IRegionCombinerModule RegionCombinerModule { get; private set; }
///
/// The file used to load and save an opensimulator archive if no filename has been specified
@@ -70,13 +71,14 @@ namespace OpenSim.Region.CoreModules.World.Archiver
public void AddRegion(Scene scene)
{
- m_scene = scene;
- m_scene.RegisterModuleInterface(this);
+ Scene = scene;
+ Scene.RegisterModuleInterface(this);
//m_log.DebugFormat("[ARCHIVER]: Enabled for region {0}", scene.RegionInfo.RegionName);
}
public void RegionLoaded(Scene scene)
{
+ RegionCombinerModule = scene.RequestModuleInterface();
}
public void RemoveRegion(Scene scene)
@@ -165,9 +167,9 @@ namespace OpenSim.Region.CoreModules.World.Archiver
public void ArchiveRegion(string savePath, Guid requestId, Dictionary options)
{
m_log.InfoFormat(
- "[ARCHIVER]: Writing archive for region {0} to {1}", m_scene.RegionInfo.RegionName, savePath);
+ "[ARCHIVER]: Writing archive for region {0} to {1}", Scene.RegionInfo.RegionName, savePath);
- new ArchiveWriteRequestPreparation(m_scene, savePath, requestId).ArchiveRegion(options);
+ new ArchiveWriteRequestPreparation(this, savePath, requestId).ArchiveRegion(options);
}
public void ArchiveRegion(Stream saveStream)
@@ -182,7 +184,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
public void ArchiveRegion(Stream saveStream, Guid requestId, Dictionary options)
{
- new ArchiveWriteRequestPreparation(m_scene, saveStream, requestId).ArchiveRegion(options);
+ new ArchiveWriteRequestPreparation(this, saveStream, requestId).ArchiveRegion(options);
}
public void DearchiveRegion(string loadPath)
@@ -193,9 +195,9 @@ namespace OpenSim.Region.CoreModules.World.Archiver
public void DearchiveRegion(string loadPath, bool merge, bool skipAssets, Guid requestId)
{
m_log.InfoFormat(
- "[ARCHIVER]: Loading archive to region {0} from {1}", m_scene.RegionInfo.RegionName, loadPath);
+ "[ARCHIVER]: Loading archive to region {0} from {1}", Scene.RegionInfo.RegionName, loadPath);
- new ArchiveReadRequest(m_scene, loadPath, merge, skipAssets, requestId).DearchiveRegion();
+ new ArchiveReadRequest(Scene, loadPath, merge, skipAssets, requestId).DearchiveRegion();
}
public void DearchiveRegion(Stream loadStream)
@@ -205,7 +207,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
public void DearchiveRegion(Stream loadStream, bool merge, bool skipAssets, Guid requestId)
{
- new ArchiveReadRequest(m_scene, loadStream, merge, skipAssets, requestId).DearchiveRegion();
+ new ArchiveReadRequest(Scene, loadStream, merge, skipAssets, requestId).DearchiveRegion();
}
}
}
--
cgit v1.1