Files
libremetaverse/Programs/GridProxyGUI/MainWindow.Persistance.cs

100 lines
2.9 KiB
C#
Raw Normal View History

2013-12-04 02:10:18 +01:00
using System;
using Gtk;
using GridProxyGUI;
using OpenMetaverse.StructuredData;
using System.IO;
using System.IO.Compression;
using System.Text;
public partial class MainWindow
{
string SessionFileName;
void SaveSession()
{
OSDMap s = new OSDMap();
OSDArray array = new OSDArray();
foreach (object[] row in messages.Messages)
{
array.Add(((Session)row[0]).Serialize());
}
s["Version"] = "1.0";
s["Description"] = "Grid Proxy Session Archive";
2013-12-04 02:10:18 +01:00
s["Messages"] = array;
System.Threading.ThreadPool.QueueUserWorkItem((sync) =>
{
try
{
using (var file = File.Open(SessionFileName, FileMode.Create))
2013-12-04 02:10:18 +01:00
{
using (var compressed = new GZipStream(file, CompressionMode.Compress))
{
using (var writer = new System.Xml.XmlTextWriter(compressed, new UTF8Encoding(false)))
{
writer.Formatting = System.Xml.Formatting.Indented;
writer.WriteStartDocument();
writer.WriteStartElement(String.Empty, "llsd", String.Empty);
OSDParser.SerializeLLSDXmlElement(writer, s);
writer.WriteEndElement();
}
}
}
}
catch { }
});
}
void OpenSession(string fileName)
{
System.Threading.ThreadPool.QueueUserWorkItem((sync) =>
{
OSD data;
try
{
using (var file = File.OpenRead(fileName))
{
using (var compressed = new GZipStream(file, CompressionMode.Decompress))
{
data = OSDParser.DeserializeLLSDXml(compressed);
}
}
}
catch
{
return;
}
Application.Invoke((sender, e) =>
{
try
{
if (data != null && data is OSDMap)
{
2013-12-04 16:04:18 +01:00
messages.Messages.Clear();
2013-12-04 02:10:18 +01:00
OSDMap map = (OSDMap)data;
OSDArray msgs = (OSDArray)map["Messages"];
foreach (var msgOSD in msgs)
{
var msg = (OSDMap)msgOSD;
var session = Session.FromOSD(msg);
if (session != null)
{
messages.Messages.AppendValues(session);
}
}
SessionFileName = fileName;
2013-12-04 02:10:18 +01:00
}
}
catch { }
});
});
}
}