From d17b83460080cfcd9f2bb0ed321e161482dd4648 Mon Sep 17 00:00:00 2001 From: Latif Khalifa Date: Sat, 13 Apr 2013 04:42:16 +0200 Subject: [PATCH] Added some decoding of matererials data for bettr display in GridProxy --- OpenMetaverse/Messages/LindenMessages.cs | 45 +++++++++++++++++++ OpenMetaverse/Messages/MessageEventDecoder.cs | 3 +- 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/OpenMetaverse/Messages/LindenMessages.cs b/OpenMetaverse/Messages/LindenMessages.cs index 9d671dcc..6f57dcea 100644 --- a/OpenMetaverse/Messages/LindenMessages.cs +++ b/OpenMetaverse/Messages/LindenMessages.cs @@ -27,6 +27,8 @@ using System; using System.Collections.Generic; using System.Net; +using System.IO; +using zlib; using OpenMetaverse.StructuredData; using OpenMetaverse.Interfaces; @@ -4367,6 +4369,49 @@ namespace OpenMetaverse.Messages.Linden } } + public class RenderMaterialsMessage : IMessage + { + public OSD MaterialData; + + public void Deserialize(OSDMap map) + { + try + { + using (MemoryStream input = new MemoryStream(map["Zipped"].AsBinary())) + { + using (MemoryStream output = new MemoryStream()) + { + using (ZOutputStream zout = new ZOutputStream(output)) + { + byte[] buffer = new byte[2048]; + int len; + while ((len = input.Read(buffer, 0, buffer.Length)) > 0) + { + zout.Write(buffer, 0, len); + } + zout.Flush(); + output.Seek(0, SeekOrigin.Begin); + MaterialData = OSDParser.DeserializeLLSDBinary(output); + } + } + } + } + catch (Exception ex) + { + Logger.Log("Failed to decode RenderMaterials message:", Helpers.LogLevel.Warning, ex); + MaterialData = new OSDMap(); + } + } + + public OSDMap Serialize() + { + return new OSDMap(); + } + + + } + + #endregion Object Messages #region Object Media Messages diff --git a/OpenMetaverse/Messages/MessageEventDecoder.cs b/OpenMetaverse/Messages/MessageEventDecoder.cs index d169a019..59e464a4 100644 --- a/OpenMetaverse/Messages/MessageEventDecoder.cs +++ b/OpenMetaverse/Messages/MessageEventDecoder.cs @@ -98,7 +98,8 @@ namespace OpenMetaverse.Messages case "DisplayNameUpdate": message = new DisplayNameUpdateMessage(); break; //case "ProductInfoRequest": message = new ProductInfoRequestMessage(); break; case "ObjectPhysicsProperties": message = new ObjectPhysicsPropertiesMessage(); break; - case "BulkUpdateInventory": message = new BulkUpdateInventoryMessage(); break; + case "BulkUpdateInventory": message = new BulkUpdateInventoryMessage(); break; + case "RenderMaterials": message = new RenderMaterialsMessage(); break; // Capabilities TODO: // DispatchRegionInfo