diff --git a/OpenMetaverse/Caps.cs b/OpenMetaverse/Caps.cs index c79a83c1..19c1fadc 100644 --- a/OpenMetaverse/Caps.cs +++ b/OpenMetaverse/Caps.cs @@ -214,7 +214,7 @@ namespace OpenMetaverse /// private void EventQueueEventHandler(string eventName, OSDMap body) { - IMessage message = DecodeEvent(eventName, body); + IMessage message = Messages.MessageUtils.DecodeEvent(eventName, body); if (message != null) { if (Simulator.Client.Settings.SYNC_PACKETCALLBACKS) diff --git a/OpenMetaverse/Messages/LindenMessages.cs b/OpenMetaverse/Messages/LindenMessages.cs index 4f531792..b546a2e3 100644 --- a/OpenMetaverse/Messages/LindenMessages.cs +++ b/OpenMetaverse/Messages/LindenMessages.cs @@ -250,14 +250,20 @@ namespace OpenMetaverse.Messages.Linden OSDMap map = new OSDMap(2); OSDMap alertInfoMap = new OSDMap(2); + + alertInfoMap["ExtraParams"] = OSD.FromString(ExtraParams); alertInfoMap["Message"] = OSD.FromString(MessageKey); - map["AlertInfo"] = alertInfoMap; + OSDArray alertArray = new OSDArray(); + alertArray.Add(alertInfoMap); + map["AlertInfo"] = alertArray; OSDMap infoMap = new OSDMap(2); infoMap["AgentID"] = OSD.FromUUID(AgentID); infoMap["Reason"] = OSD.FromString(Reason); - map["Info"] = infoMap; + OSDArray infoArray = new OSDArray(); + infoArray.Add(infoMap); + map["Info"] = infoArray; return map; @@ -269,11 +275,15 @@ namespace OpenMetaverse.Messages.Linden /// public void Deserialize(OSDMap map) { - OSDMap alertInfoMap = (OSDMap)map["AlertInfo"]; + + OSDArray alertInfoArray = (OSDArray) map["AlertInfo"]; + + OSDMap alertInfoMap = (OSDMap) alertInfoArray[0]; ExtraParams = alertInfoMap["ExtraParams"].AsString(); MessageKey = alertInfoMap["Message"].AsString(); - OSDMap infoMap = (OSDMap) map["Info"]; + OSDArray infoArray = (OSDArray) map["Info"]; + OSDMap infoMap = (OSDMap) infoArray[0]; AgentID = infoMap["AgentID"].AsUUID(); Reason = infoMap["Reason"].AsString(); } @@ -2037,7 +2047,7 @@ namespace OpenMetaverse.Messages.Linden QueueEvent ev = new QueueEvent(); ev.MessageKey = eventMap["message"].AsString(); - ev.EventMessage = Caps.DecodeEvent(ev.MessageKey, (OSDMap)eventMap["body"]); + ev.EventMessage = MessageUtils.DecodeEvent(ev.MessageKey, (OSDMap)eventMap["body"]); MessageEvents[i] = ev; } } diff --git a/OpenMetaverse/Messages/MessageEventDecoder.cs b/OpenMetaverse/Messages/MessageEventDecoder.cs index ea18716f..682b518b 100644 --- a/OpenMetaverse/Messages/MessageEventDecoder.cs +++ b/OpenMetaverse/Messages/MessageEventDecoder.cs @@ -31,10 +31,10 @@ using OpenMetaverse.StructuredData; using OpenMetaverse.Interfaces; using OpenMetaverse.Messages.Linden; -namespace OpenMetaverse +namespace OpenMetaverse.Messages { - - public partial class Caps + + public static partial class MessageUtils { /// /// Return a decoded capabilities message as a strongly typed object @@ -77,7 +77,7 @@ namespace OpenMetaverse case "ViewerStats": message = new ViewerStatsMessage(); break; case "EventQueueGet": message = new EventQueueGetMessage(); break; case "CrossedRegion": message = new CrossedRegionMessage(); break; - case "TelportFailed": message = new TeleportFailedMessage(); break; + case "TeleportFailed": message = new TeleportFailedMessage(); break; // Capabilities TODO: diff --git a/OpenMetaverse/Messages/Messages.cs b/OpenMetaverse/Messages/Messages.cs index 06d0972f..28f4cfd2 100644 --- a/OpenMetaverse/Messages/Messages.cs +++ b/OpenMetaverse/Messages/Messages.cs @@ -31,7 +31,7 @@ using OpenMetaverse.StructuredData; namespace OpenMetaverse.Messages { - public static class MessageUtils + public static partial class MessageUtils { public static IPAddress ToIP(OSD osd) { diff --git a/Programs/WinGridProxy/Form1.cs b/Programs/WinGridProxy/Form1.cs index 32b12373..bbc0f2f8 100644 --- a/Programs/WinGridProxy/Form1.cs +++ b/Programs/WinGridProxy/Form1.cs @@ -902,6 +902,9 @@ namespace WinGridProxy /// A formatted string containing the names and values of the source object public static string IMessageToString(object message) { + if (message == null) + return String.Empty; + StringBuilder result = new StringBuilder(); // common/custom types result.AppendFormat("Message Type {0}" + System.Environment.NewLine, message.GetType().Name); @@ -928,7 +931,7 @@ namespace WinGridProxy foreach (FieldInfo nestedField in nestedArrayObject.GetType().GetFields()) { - var nt = nestedField.GetValue(nestedArrayObject).GetType().Name; + //var nt = nestedField.GetValue(nestedArrayObject).GetType().Name; if (nestedField.FieldType.IsEnum) { result.AppendFormat("{0, 30}: {1} {2} ({3})" + System.Environment.NewLine, @@ -937,11 +940,11 @@ namespace WinGridProxy nestedField.GetValue(nestedArrayObject), "D"), nestedField.GetValue(nestedArrayObject), nestedField.GetValue(nestedArrayObject).GetType().Name); - } - else if(nestedField.FieldType.IsInterface) - { - result.AppendLine(IMessageToString(nestedField.GetValue(nestedArrayObject))); - } + } + else if (nestedField.FieldType.IsInterface) + { + result.AppendLine(IMessageToString(nestedField.GetValue(nestedArrayObject))); + } else { result.AppendFormat("{0, 30}: {1} ({2})" + System.Environment.NewLine, @@ -1331,9 +1334,9 @@ namespace WinGridProxy OSDMap data = (OSDMap)osd; IMessage message; if (data.ContainsKey("body")) - message = Caps.DecodeEvent(key, (OSDMap)data["body"]); + message = OpenMetaverse.Messages.MessageUtils.DecodeEvent(key, (OSDMap)data["body"]); else - message = Caps.DecodeEvent(key, data); + message = OpenMetaverse.Messages.MessageUtils.DecodeEvent(key, data); if (message != null) return IMessageToString(message);