154 lines
4.6 KiB
C#
Executable File
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 { }
|
|
});
|
|
});
|
|
}
|
|
|
|
}
|