* Written a improved self-contained version of the XML Object Serialiser for the ExportSerialisationModule.

* This now outputs properly indented XML, that is sorted before construction. This produces a file which proper .diffs can be generated from - the end result being smaller more compact revisions when saving to SVN.
* Files are a little heavy still however, compression looks like a good method for packing sim-states for transport outside of SVN. Zip seems to be a good candidate and is on the TODO.
0.6.0-stable
Adam Frisby 2008-04-21 04:36:32 +00:00
parent 8cf42ddb84
commit 20a4a402f6
1 changed files with 47 additions and 1 deletions

View File

@ -26,6 +26,9 @@
*/ */
using OpenSim.Region.Environment.Scenes; using OpenSim.Region.Environment.Scenes;
using System.IO;
using System.Collections.Generic;
using System.Xml;
namespace OpenSim.Region.Environment.Modules.ExportSerialiser namespace OpenSim.Region.Environment.Modules.ExportSerialiser
{ {
@ -33,11 +36,54 @@ namespace OpenSim.Region.Environment.Modules.ExportSerialiser
{ {
#region IFileSerialiser Members #region IFileSerialiser Members
public void SaveSerialisedToFile(string fileName, Scene scene)
{
int primCount = 0;
string xmlstream = "<scene>";
List<EntityBase> EntityList = scene.GetEntities();
List<string> EntityXml = new List<string>();
foreach (EntityBase ent in EntityList)
{
if (ent is SceneObjectGroup)
{
EntityXml.Add(((SceneObjectGroup)ent).ToXmlString2());
primCount++;
}
}
EntityXml.Sort();
foreach (string xml in EntityXml)
xmlstream += xml;
xmlstream += "</scene>";
MemoryStream stream = new MemoryStream();
XmlTextWriter formatter = new XmlTextWriter(stream, System.Text.Encoding.UTF8);
XmlDocument doc = new XmlDocument();
doc.LoadXml(xmlstream);
formatter.Formatting = Formatting.Indented;
doc.WriteContentTo(formatter);
formatter.Flush();
StreamReader reader = new StreamReader(stream);
stream.Seek(0, SeekOrigin.Begin);
FileStream objectsFile = new FileStream(fileName, FileMode.Create);
stream.WriteTo(objectsFile);
objectsFile.Flush();
objectsFile.Close();
}
public string WriteToFile(Scene scene, string dir) public string WriteToFile(Scene scene, string dir)
{ {
string targetFileName = dir + "objects.xml"; string targetFileName = dir + "objects.xml";
scene.SavePrimsToXml2(targetFileName); SaveSerialisedToFile(targetFileName, scene);
return "objects.xml"; return "objects.xml";
} }