diff --git a/OpenMetaverse/Messages/LindenMessages.cs b/OpenMetaverse/Messages/LindenMessages.cs index c149bc1d..fe745237 100644 --- a/OpenMetaverse/Messages/LindenMessages.cs +++ b/OpenMetaverse/Messages/LindenMessages.cs @@ -2205,16 +2205,50 @@ namespace OpenMetaverse.Messages.Linden #region Grid/Maps - /// - /// A message sent from the simulator to the viewer which contains an array of map images and their grid coordinates - /// - public class MapLayerMessage : IMessage + /// Base class for Map Layers via Capabilities + public abstract class MapLayerMessageBase { /// public int Flags; /// - /// A n object containing map location details + /// Serialize the object + /// + /// An containing the objects data + public abstract OSDMap Serialize(); + + /// + /// Deserialize the message + /// + /// An containing the data + public abstract void Deserialize(OSDMap map); + } + + /// + /// Sent by an agent to the capabilities server to request map layers + /// + public class MapLayerRequestVariant : MapLayerMessageBase + { + public override OSDMap Serialize() + { + OSDMap map = new OSDMap(1); + map["Flags"] = OSD.FromInteger(Flags); + return map; + } + + public override void Deserialize(OSDMap map) + { + Flags = map["Flags"].AsInteger(); + } + } + + /// + /// A message sent from the simulator to the viewer which contains an array of map images and their grid coordinates + /// + public class MapLayerReplyVariant : MapLayerMessageBase + { + /// + /// An object containing map location details /// public class LayerData { @@ -2237,7 +2271,7 @@ namespace OpenMetaverse.Messages.Linden /// Serialize the object /// /// An containing the objects data - public OSDMap Serialize() + public override OSDMap Serialize() { OSDMap map = new OSDMap(2); OSDMap agentMap = new OSDMap(1); @@ -2267,7 +2301,7 @@ namespace OpenMetaverse.Messages.Linden /// Deserialize the message /// /// An containing the data - public void Deserialize(OSDMap map) + public override void Deserialize(OSDMap map) { OSDMap agentMap = (OSDMap)map["AgentData"]; Flags = agentMap["Flags"].AsInteger(); @@ -2292,6 +2326,38 @@ namespace OpenMetaverse.Messages.Linden } } + public class MapLayerMessage : IMessage + { + /// Object containing request or response + public MapLayerMessageBase Request; + + /// + /// Serialize the object + /// + /// An containing the objects data + public OSDMap Serialize() + { + return Request.Serialize(); + } + + /// + /// Deserialize the message + /// + /// An containing the data + public void Deserialize(OSDMap map) + { + if (map.ContainsKey("LayerData")) + Request = new MapLayerReplyVariant(); + else if (map.ContainsKey("Flags")) + Request = new MapLayerRequestVariant(); + else + Logger.Log("Unable to deserialize MapLayerMessage: No message handler exists", Helpers.LogLevel.Warning); + + if (Request != null) + Request.Deserialize(map); + } + } + #endregion #region Session/Communication diff --git a/OpenMetaverse/Messages/MessageEventDecoder.cs b/OpenMetaverse/Messages/MessageEventDecoder.cs index 73770d6a..9c868ad3 100644 --- a/OpenMetaverse/Messages/MessageEventDecoder.cs +++ b/OpenMetaverse/Messages/MessageEventDecoder.cs @@ -119,7 +119,7 @@ namespace OpenMetaverse.Messages } catch (Exception e) { - Logger.Log("Exception while tring to Deserialize " + eventName + ":" + e.Message + ": " + e.StackTrace, Helpers.LogLevel.Error); + Logger.Log("Exception while tring to Deserialize " + eventName + ":" + e.Message + ": " + e.StackTrace, Helpers.LogLevel.Error); } return null;