From 516ce1d0fc738a8ae843def2f5e99456d6df3b5b Mon Sep 17 00:00:00 2001 From: Jim Radford Date: Fri, 10 Jul 2009 01:31:24 +0000 Subject: [PATCH] LIBOMV-619 Adds AgentDropGroupMessage + Handlers (this packet recently switched over from UDP to CAPS) * Adds ForceCloseChatterBoxSessionMessage and decoder, no handler written yet git-svn-id: http://libopenmetaverse.googlecode.com/svn/libopenmetaverse/trunk@2953 52acb1d6-8a22-11de-b505-999d5b087335 --- OpenMetaverse/GroupManager.cs | 16 +++ OpenMetaverse/Messages/LindenMessages.cs | 110 +++++++++++++++++- OpenMetaverse/Messages/MessageEventDecoder.cs | 31 +++++ 3 files changed, 155 insertions(+), 2 deletions(-) diff --git a/OpenMetaverse/GroupManager.cs b/OpenMetaverse/GroupManager.cs index d6d429f0..8f1ffa6e 100644 --- a/OpenMetaverse/GroupManager.cs +++ b/OpenMetaverse/GroupManager.cs @@ -653,6 +653,7 @@ namespace OpenMetaverse GroupName2KeyCache = new InternalDictionary(); Client.Network.RegisterEventCallback("AgentGroupDataUpdate", new Caps.EventQueueCallback(AgentGroupDataUpdateHandler)); + // deprecated in simulator v1.27 Client.Network.RegisterCallback(PacketType.AgentDropGroup, new NetworkManager.PacketCallback(AgentDropGroupHandler)); Client.Network.RegisterCallback(PacketType.GroupTitlesReply, new NetworkManager.PacketCallback(GroupTitlesHandler)); Client.Network.RegisterCallback(PacketType.GroupProfileReply, new NetworkManager.PacketCallback(GroupProfileHandler)); @@ -668,6 +669,8 @@ namespace OpenMetaverse Client.Network.RegisterCallback(PacketType.UUIDGroupNameReply, new NetworkManager.PacketCallback(UUIDGroupNameReplyHandler)); Client.Network.RegisterCallback(PacketType.EjectGroupMemberReply, new NetworkManager.PacketCallback(EjectGroupMemberReplyHandler)); Client.Network.RegisterCallback(PacketType.GroupNoticesListReply, new NetworkManager.PacketCallback(GroupNoticesListReplyHandler)); + + Client.Network.RegisterEventCallback("AgentDropGroup", new Caps.EventQueueCallback(AgentDropGroupMessageHandler)); } /// @@ -1232,6 +1235,19 @@ namespace OpenMetaverse } } + private void AgentDropGroupMessageHandler(string capsKey, IMessage message, Simulator simulator) + { + if (OnGroupDropped != null) + { + AgentDropGroupMessage msg = (AgentDropGroupMessage)message; + for (int i = 0; i < msg.AgentDataBlock.Length; i++) + { + try { OnGroupDropped(msg.AgentDataBlock[i].GroupID); } + catch (Exception e) { Logger.Log(e.Message, Helpers.LogLevel.Error, Client, e); } + } + } + } + private void GroupProfileHandler(Packet packet, Simulator simulator) { if (OnGroupProfile != null) diff --git a/OpenMetaverse/Messages/LindenMessages.cs b/OpenMetaverse/Messages/LindenMessages.cs index d63d697f..b319879f 100644 --- a/OpenMetaverse/Messages/LindenMessages.cs +++ b/OpenMetaverse/Messages/LindenMessages.cs @@ -1245,9 +1245,78 @@ namespace OpenMetaverse.Messages.Linden LanguagePublic = map["language_is_public"].AsBoolean(); Language = map["language"].AsString(); } - } + /// + /// An EventQueue message sent from the simulator to an agent when the agent + /// leaves a group + /// + public class AgentDropGroupMessage : IMessage + { + /// + /// An object containing the Agents UUID, and the Groups UUID + /// + public class AgentData + { + /// + /// The ID of the Agent leaving the group + /// + public UUID AgentID; + /// + /// The GroupID the Agent is leaving + /// + public UUID GroupID; + } + + /// + /// An Array containing the AgentID and GroupID + /// + public AgentData[] AgentDataBlock; + + /// + /// Serialize the object + /// + /// An containing the objects data + public OSDMap Serialize() + { + OSDMap map = new OSDMap(1); + + OSDArray agentDataArray = new OSDArray(AgentDataBlock.Length); + + for (int i = 0; i < AgentDataBlock.Length; i++) + { + OSDMap agentMap = new OSDMap(2); + agentMap["AgentID"] = OSD.FromUUID(AgentDataBlock[i].AgentID); + agentMap["GroupID"] = OSD.FromUUID(AgentDataBlock[i].GroupID); + agentDataArray.Add(agentMap); + } + map["AgentData"] = agentDataArray; + + return map; + } + + /// + /// Deserialize the message + /// + /// An containing the data + public void Deserialize(OSDMap map) + { + OSDArray agentDataArray = (OSDArray)map["AgentData"]; + + AgentDataBlock = new AgentData[agentDataArray.Count]; + + for (int i = 0; i < agentDataArray.Count; i++) + { + OSDMap agentMap = (OSDMap)agentDataArray[i]; + AgentData agentData = new AgentData(); + + agentData.AgentID = agentMap["AgentID"].AsUUID(); + agentData.GroupID = agentMap["GroupID"].AsUUID(); + + AgentDataBlock[i] = agentData; + } + } + } #endregion #region Voice Messages @@ -2409,6 +2478,44 @@ namespace OpenMetaverse.Messages.Linden } } + /// + /// An EventQueue message sent when the agent is forcibly removed from a chatterbox session + /// + public class ForceCloseChatterBoxSessionMessage : IMessage + { + /// + /// A string containing the reason the agent was removed + /// + string Reason; + /// + /// The ChatterBoxSession's SessionID + /// + UUID SessionID; + + /// + /// Serialize the object + /// + /// An containing the objects data + public OSDMap Serialize() + { + OSDMap map = new OSDMap(2); + map["reason"] = OSD.FromString(Reason); + map["session_id"] = OSD.FromUUID(SessionID); + + return map; + } + + /// + /// Deserialize the message + /// + /// An containing the data + public void Deserialize(OSDMap map) + { + Reason = map["reason"].AsString(); + SessionID = map["session_id"].AsUUID(); + } + } + #endregion #region EventQueue @@ -2537,7 +2644,6 @@ namespace OpenMetaverse.Messages.Linden #endregion - #region Stats Messages public class ViewerStatsMessage : IMessage diff --git a/OpenMetaverse/Messages/MessageEventDecoder.cs b/OpenMetaverse/Messages/MessageEventDecoder.cs index 11e1af2c..f41f87d6 100644 --- a/OpenMetaverse/Messages/MessageEventDecoder.cs +++ b/OpenMetaverse/Messages/MessageEventDecoder.cs @@ -81,6 +81,37 @@ namespace OpenMetaverse.Messages case "DirLandReply": message = new DirLandReplyMessage(); break; case "ScriptRunningReply": message = new ScriptRunningReplyMessage(); break; case "SearchStatRequest": message = new SearchStatRequestMessage(); break; + case "AgentDropGroup": message = new AgentDropGroupMessage(); break; + /* + * { + 'body': + { + 'AgentData': + [ + { + 'AgentID':u8ec835d1-b61d-4563-86da-c91e174f0f2e + , + 'GroupID':u04f595b0-cdc8-97f0-e710-9564824c03b2 + } + ] + } + , + 'message':'AgentDropGroup' + }*/ + case "ForceCloseChatterBoxSession": message = new ForceCloseChatterBoxSessionMessage(); break; + /* + * No Decoder for ForceCloseChatterBoxSession + + { + 'body': + { + 'reason':'removed' + , + 'session_id':u04f595b0-cdc8-97f0-e710-9564824c03b2 + } + , + 'message':'ForceCloseChatterBoxSession' + } */ //case "ProductInfoRequest": message = new ProductInfoRequestMessage(); break; // Capabilities TODO: