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

154 lines
4.6 KiB
C#
Executable File

using System;
using Gtk;
using GridProxyGUI;
using OpenMetaverse.StructuredData;
using System.IO;
using System.IO.Compression;
using System.Text;
using System.Net;
public partial class MainWindow
{
string SessionFileName;
void LoadSavedSettings()
{
if (Options.Instance.ContainsKey("main_split_pos"))
{
mainSplit.Position = Options.Instance["main_split_pos"];
mainSplit.PositionSet = true;
}
if (Options.Instance.ContainsKey("main_width"))
{
Resize(Options.Instance["main_width"], Options.Instance["main_height"]);
Move(Options.Instance["main_x"], Options.Instance["main_y"]);
}
// populate the listen box with the known IP Addresses of this host
cbListen.AppendText("127.0.0.1");
int selected = 0;
try
{
int current = 0;
foreach (var address in Dns.GetHostAddresses(Dns.GetHostName()))
{
if (address.AddressFamily != System.Net.Sockets.AddressFamily.InterNetwork || address.ToString() == "127.0.0.1") continue;
current++;
if (Options.Instance["listed_address"] == address.ToString())
{
selected = current;
}
cbListen.AppendText(address.ToString());
}
}
catch { }
cbListen.Active = selected;
}
void SaveSettings()
{
Options.Instance["listed_address"] = cbListen.ActiveText;
Options.Instance["main_split_pos"] = mainSplit.Position;
int x, y;
GetSize(out x, out y); ;
Options.Instance["main_width"] = x;
Options.Instance["main_height"] = y;
GetPosition(out x, out y);
Options.Instance["main_x"] = x;
Options.Instance["main_y"] = y;
Options.Instance.Save();
Application.Quit();
}
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";
s["Messages"] = array;
System.Threading.ThreadPool.QueueUserWorkItem((sync) =>
{
try
{
using (var file = File.Open(SessionFileName, FileMode.Create))
{
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)
{
messages.Messages.Clear();
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;
}
}
catch { }
});
});
}
}