From f668fa778fc06293814986daefd7c7cec3011f50 Mon Sep 17 00:00:00 2001 From: Latif Khalifa Date: Thu, 11 Jun 2009 09:37:50 +0000 Subject: [PATCH] Cleanup of object serialization git-svn-id: https://radegast.googlecode.com/svn/trunk@28 f7a694da-4d33-11de-9ad6-1127a62b9fcd --- Radegast/Core/PrimDeserializer.cs | 38 +++++++++++----------- Radegast/Core/PrimSerializer.cs | 31 ++++++++++-------- Radegast/GUI/Consoles/AttachmentDetail.cs | 31 ++++++++++++------ Radegast/GUI/Consoles/MasterTab.cs | 54 +++++++++++++------------------ Radegast/Radegast.csproj | 12 +++---- 5 files changed, 88 insertions(+), 78 deletions(-) diff --git a/Radegast/Core/PrimDeserializer.cs b/Radegast/Core/PrimDeserializer.cs index a808bcd..910364b 100644 --- a/Radegast/Core/PrimDeserializer.cs +++ b/Radegast/Core/PrimDeserializer.cs @@ -20,22 +20,30 @@ namespace Radegast dlg.Multiselect = false; DialogResult res = dlg.ShowDialog(); - System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(delegate() + if (res == DialogResult.OK) { - try { - if (res == DialogResult.OK) { + + System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(delegate() + { + try + { PrimDeserializer d = new PrimDeserializer(client); string primsXmls = System.IO.File.ReadAllText(dlg.FileName); d.CreateObjectFromXml(primsXmls); + d.CleanUp(); + d = null; MessageBox.Show(mainWindow, "Successfully imported " + dlg.FileName, "Success", MessageBoxButtons.OK, MessageBoxIcon.Information); } - } catch (Exception excp) { - MessageBox.Show(mainWindow, excp.Message, "Saving failed", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - })); + catch (Exception excp) + { + MessageBox.Show(mainWindow, excp.Message, "Saving failed", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + })); - t.IsBackground = true; - t.Start(); + t.IsBackground = true; + t.Start(); + + } } private enum ImporterState @@ -70,22 +78,16 @@ namespace Radegast List linkQueue; uint rootLocalID; ImporterState state = ImporterState.Idle; - ObjectManager.NewPrimCallback newPrimCallback = null; public PrimDeserializer(GridClient c) { Client = c; - if (newPrimCallback == null) { - newPrimCallback = new ObjectManager.NewPrimCallback(Objects_OnNewPrim); - Client.Objects.OnNewPrim += newPrimCallback; - } + Client.Objects.OnNewPrim += new ObjectManager.NewPrimCallback(Objects_OnNewPrim); } - ~PrimDeserializer() + public void CleanUp() { - if (newPrimCallback != null) { - Client.Objects.OnNewPrim -= newPrimCallback; - } + Client.Objects.OnNewPrim -= new ObjectManager.NewPrimCallback(Objects_OnNewPrim); } public bool CreateObjectFromXml(string xml) diff --git a/Radegast/Core/PrimSerializer.cs b/Radegast/Core/PrimSerializer.cs index 2929627..bb0c904 100644 --- a/Radegast/Core/PrimSerializer.cs +++ b/Radegast/Core/PrimSerializer.cs @@ -10,7 +10,6 @@ namespace Radegast public class PrimSerializer { List Textures = new List(); - //Primitive.ObjectProperties Properties; UUID SelectedObject = UUID.Zero; Dictionary PrimsWaiting = new Dictionary(); @@ -24,6 +23,10 @@ namespace Radegast Client.Objects.OnObjectProperties += new ObjectManager.ObjectPropertiesCallback(Objects_OnObjectProperties); } + public void CleanUp() + { + Client.Objects.OnObjectProperties -= new ObjectManager.ObjectPropertiesCallback(Objects_OnObjectProperties); + } public string GetSerializedAttachmentPrims(Simulator sim, uint localID) { @@ -34,7 +37,7 @@ namespace Radegast } ); - bool complete = RequestObjectProperties(prims, 500); + RequestObjectProperties(prims, 500); int i = prims.FindIndex( delegate(Primitive prim) @@ -68,10 +71,7 @@ namespace Radegast } ); - if (!RequestObjectProperties(prims, 500)) - { - Logger.Log("Failed to retrieve object properties for " + PrimsWaiting.Count + " prims out of " + prims.Count, Helpers.LogLevel.Warning, Client); - } + RequestObjectProperties(prims, 500); return OSDParser.SerializeLLSDXmlString(Helpers.PrimListToOSD(prims)); } @@ -84,19 +84,24 @@ namespace Radegast lock (PrimsWaiting) { PrimsWaiting.Clear(); - for (int i = 0; i < objects.Count; ++i) { - if (objects[i].Properties == null) - { - localids[i] = objects[i].LocalID; - PrimsWaiting.Add(objects[i].ID, objects[i]); - } + for (int i = 0; i < objects.Count; ++i) + { + localids[i] = objects[i].LocalID; + PrimsWaiting.Add(objects[i].ID, objects[i]); } } if (localids.Length > 0) { Client.Objects.SelectObjects(Client.Network.CurrentSim, localids, false); - return AllPropertiesReceived.WaitOne(2000 + msPerRequest * localids.Length, false); + bool success = AllPropertiesReceived.WaitOne(2000 + msPerRequest * localids.Length, false); + if (PrimsWaiting.Count > 0) + { + Logger.Log("Failed to retrieve object properties for " + PrimsWaiting.Count + " prims out of " + localids.Length, Helpers.LogLevel.Warning, Client); + + } + Client.Objects.DeselectObjects(Client.Network.CurrentSim, localids); + return success; } return true; } diff --git a/Radegast/GUI/Consoles/AttachmentDetail.cs b/Radegast/GUI/Consoles/AttachmentDetail.cs index 412049e..bac3ea2 100644 --- a/Radegast/GUI/Consoles/AttachmentDetail.cs +++ b/Radegast/GUI/Consoles/AttachmentDetail.cs @@ -5,6 +5,7 @@ using System.Drawing; using System.Data; using System.Text; using System.Windows.Forms; +using System.Threading; using OpenMetaverse; namespace Radegast @@ -97,15 +98,27 @@ namespace Radegast dlg.Filter = "XML file (*.xml)|*.xml"; DialogResult res = dlg.ShowDialog(); - try { - if (res == DialogResult.OK) { - PrimSerializer s = new PrimSerializer(client); - string primsXmls = s.GetSerializedAttachmentPrims(client.Network.CurrentSim, attachment.LocalID); - System.IO.File.WriteAllText(dlg.FileName, primsXmls); - MessageBox.Show(mainWindow, "Successfully saved " + dlg.FileName, "Success", MessageBoxButtons.OK, MessageBoxIcon.Information); - } - } catch (Exception excp) { - MessageBox.Show(mainWindow, excp.Message, "Saving failed", MessageBoxButtons.OK, MessageBoxIcon.Error); + if (res == DialogResult.OK) + { + Thread t = new Thread(new ThreadStart(delegate() + { + try + { + PrimSerializer s = new PrimSerializer(client); + string primsXmls = s.GetSerializedAttachmentPrims(client.Network.CurrentSim, attachment.LocalID); + System.IO.File.WriteAllText(dlg.FileName, primsXmls); + s.CleanUp(); + s = null; + MessageBox.Show(mainWindow, "Successfully saved " + dlg.FileName, "Success", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + catch (Exception excp) + { + MessageBox.Show(mainWindow, excp.Message, "Saving failed", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + )); + t.IsBackground = true; + t.Start(); } } diff --git a/Radegast/GUI/Consoles/MasterTab.cs b/Radegast/GUI/Consoles/MasterTab.cs index 5e73f63..b484497 100644 --- a/Radegast/GUI/Consoles/MasterTab.cs +++ b/Radegast/GUI/Consoles/MasterTab.cs @@ -5,6 +5,7 @@ using System.Drawing; using System.Data; using System.Text; using System.Windows.Forms; +using System.Threading; using RadegastNc; using OpenMetaverse; @@ -195,42 +196,31 @@ namespace Radegast dlg.Filter = "XML file (*.xml)|*.xml"; DialogResult res = dlg.ShowDialog(); - try { - if (res == DialogResult.OK) { - PrimSerializer s = new PrimSerializer(client); - string primsXmls = s.GetSerializedPrims(client.Network.CurrentSim, selectedPrim.LocalID); - System.IO.File.WriteAllText(dlg.FileName, primsXmls); - MessageBox.Show(mainWindow, "Successfully saved " + dlg.FileName, "Success", MessageBoxButtons.OK, MessageBoxIcon.Information); - } - } catch (Exception excp) { - MessageBox.Show(mainWindow, excp.Message, "Saving failed", MessageBoxButtons.OK, MessageBoxIcon.Error); + if (res == DialogResult.OK) + { + Thread t = new Thread(new ThreadStart(delegate() + { + try + { + PrimSerializer s = new PrimSerializer(client); + string primsXmls = s.GetSerializedPrims(client.Network.CurrentSim, selectedPrim.LocalID); + System.IO.File.WriteAllText(dlg.FileName, primsXmls); + s.CleanUp(); + s = null; + MessageBox.Show(mainWindow, "Successfully saved " + dlg.FileName, "Success", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + catch (Exception excp) + { + MessageBox.Show(mainWindow, excp.Message, "Saving failed", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + })); + t.IsBackground = true; + t.Start(); } } private void loadBtn_Click(object sender, EventArgs e) { - WindowWrapper mainWindow = new WindowWrapper(frmMain.ActiveForm.Handle); - System.Windows.Forms.OpenFileDialog dlg = new OpenFileDialog(); - dlg.Title = "Open object file"; - dlg.Filter = "XML file (*.xml)|*.xml"; - dlg.Multiselect = false; - DialogResult res = dlg.ShowDialog(); - - System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(delegate() - { - try { - if (res == DialogResult.OK) { - PrimDeserializer d = new PrimDeserializer(client); - string primsXmls = System.IO.File.ReadAllText(dlg.FileName); - d.CreateObjectFromXml(primsXmls); - MessageBox.Show(mainWindow, "Successfully imported " + dlg.FileName, "Success", MessageBoxButtons.OK, MessageBoxIcon.Information); - } - } catch (Exception excp) { - MessageBox.Show(mainWindow, excp.Message, "Saving failed", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - })); - - t.IsBackground = true; - t.Start(); + PrimDeserializer.ImportFromFile(client); } private void btnPoint_Click(object sender, EventArgs e) diff --git a/Radegast/Radegast.csproj b/Radegast/Radegast.csproj index c9855f5..a763666 100644 --- a/Radegast/Radegast.csproj +++ b/Radegast/Radegast.csproj @@ -518,18 +518,18 @@ - - {235DD548-2A5B-4E41-BACC-AF9378CC729F} - OpenMetaverse - - {A65C6BF0-4D18-4F20-AE4C-92003ED4A7FD} + {5D27958B-E8F7-4FD3-9CBB-B7A5148F983E} OpenMetaverse.StructuredData - {6E362F7C-F6B0-4F42-B678-5E7F9D0C22F4} + {6E88BCFB-E68B-4B6D-BC57-888CB7640217} OpenMetaverseTypes + + {1133A791-5AB5-4F2B-80A2-7496237BB61F} + OpenMetaverse + {8EE25E10-46BC-486E-87B5-5E49B879E0D1} RadegastNetcom -- 2.11.0