diff --git a/OpenMetaverse/Messages/LindenMessages.cs b/OpenMetaverse/Messages/LindenMessages.cs index 9616037c..11528fb5 100644 --- a/OpenMetaverse/Messages/LindenMessages.cs +++ b/OpenMetaverse/Messages/LindenMessages.cs @@ -1631,6 +1631,103 @@ namespace OpenMetaverse.Messages.Linden #region ChatSessionRequestMessage + + public interface ISearchStatRequest + { + /// + /// Serialize the object + /// + /// An containing the objects data + OSDMap Serialize(); + + /// + /// Deserialize the message + /// + /// An containing the data + void Deserialize(OSDMap map); + } + + // variant A - the request to the simulator + public class SearchStatRequestRequest : ISearchStatRequest + { + public UUID ClassifiedID; + + public OSDMap Serialize() + { + OSDMap map = new OSDMap(1); + map["classified_id"] = OSD.FromUUID(ClassifiedID); + return map; + } + + public void Deserialize(OSDMap map) + { + ClassifiedID = map["classified_id"].AsUUID(); + } + + } + + public class SearchStatRequestReply : ISearchStatRequest + { + public int MapClicks; + public int ProfileClicks; + public int SearchMapClicks; + public int SearchProfileClicks; + public int SearchTeleportClicks; + public int TeleportClicks; + + public OSDMap Serialize() + { + OSDMap map = new OSDMap(6); + map["map_clicks"] = OSD.FromInteger(MapClicks); + map["profile_clicks"] = OSD.FromInteger(ProfileClicks); + map["search_map_clicks"] = OSD.FromInteger(SearchMapClicks); + map["search_profile_clicks"] = OSD.FromInteger(SearchProfileClicks); + map["search_teleport_clicks"] = OSD.FromInteger(SearchTeleportClicks); + map["teleport_clicks"] = OSD.FromInteger(TeleportClicks); + return map; + } + + public void Deserialize(OSDMap map) + { + MapClicks = map["map_clicks"].AsInteger(); + ProfileClicks = map["profile_clicks"].AsInteger(); + SearchMapClicks = map["search_map_clicks"].AsInteger(); + SearchProfileClicks = map["search_profile_clicks"].AsInteger(); + SearchTeleportClicks = map["search_teleport_clicks"].AsInteger(); + TeleportClicks = map["teleport_clicks"].AsInteger(); + } + } + + public class SearchStatRequestMessage : IMessage + { + public ISearchStatRequest 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("map_clicks")) + Request = new SearchStatRequestReply(); + else if (map.ContainsKey("classified_id")) + Request = new SearchStatRequestRequest(); + else + Logger.Log("Unable to deserialize SearchStatRequest: No message handler exists for method " + map["method"].AsString(), Helpers.LogLevel.Warning); + + Request.Deserialize(map); + } + } + public interface IChatSessionRequest { /// diff --git a/OpenMetaverse/Messages/MessageEventDecoder.cs b/OpenMetaverse/Messages/MessageEventDecoder.cs index ae80e75b..11e1af2c 100644 --- a/OpenMetaverse/Messages/MessageEventDecoder.cs +++ b/OpenMetaverse/Messages/MessageEventDecoder.cs @@ -80,6 +80,7 @@ namespace OpenMetaverse.Messages case "UpdateAgentInformation": message = new UpdateAgentInformationMessage(); break; case "DirLandReply": message = new DirLandReplyMessage(); break; case "ScriptRunningReply": message = new ScriptRunningReplyMessage(); break; + case "SearchStatRequest": message = new SearchStatRequestMessage(); break; //case "ProductInfoRequest": message = new ProductInfoRequestMessage(); break; // Capabilities TODO: