From 5a3b03856c2dc76b91d44d463451e363bdb96aa0 Mon Sep 17 00:00:00 2001 From: Latif Khalifa Date: Sat, 16 Feb 2013 07:05:16 +0100 Subject: [PATCH] LIBOMV-955: Added handling AgentStateUpdate EQ message --- OpenMetaverse/AgentManager.cs | 12 ++++ OpenMetaverse/Messages/LindenMessages.cs | 58 +++++++++++++++++++ OpenMetaverse/Messages/MessageEventDecoder.cs | 1 + 3 files changed, 71 insertions(+) diff --git a/OpenMetaverse/AgentManager.cs b/OpenMetaverse/AgentManager.cs index e17dbcc7..947d6f9c 100644 --- a/OpenMetaverse/AgentManager.cs +++ b/OpenMetaverse/AgentManager.cs @@ -1449,6 +1449,9 @@ namespace OpenMetaverse } } + /// Various abilities and preferences sent by the grid + public AgentStateUpdateMessage AgentStateStatus; + #endregion Properties internal uint localID; @@ -1534,6 +1537,7 @@ namespace OpenMetaverse // CAPS callbacks Client.Network.RegisterEventCallback("EstablishAgentCommunication", new Caps.EventQueueCallback(EstablishAgentCommunicationEventHandler)); Client.Network.RegisterEventCallback("SetDisplayNameReply", new Caps.EventQueueCallback(SetDisplayNameReplyEventHandler)); + Client.Network.RegisterEventCallback("AgentStateUpdate", new Caps.EventQueueCallback(AgentStateUpdateEventHandler)); // Incoming Group Chat Client.Network.RegisterEventCallback("ChatterBoxInvitation", new Caps.EventQueueCallback(ChatterBoxInvitationEventHandler)); // Outgoing Group Chat Reply @@ -3702,6 +3706,14 @@ namespace OpenMetaverse } } + protected void AgentStateUpdateEventHandler(string capsKey, IMessage message, Simulator simulator) + { + if (message is AgentStateUpdateMessage) + { + AgentStateStatus = (AgentStateUpdateMessage)message; + } + } + protected void EstablishAgentCommunicationEventHandler(string capsKey, IMessage message, Simulator simulator) { EstablishAgentCommunicationMessage msg = (EstablishAgentCommunicationMessage)message; diff --git a/OpenMetaverse/Messages/LindenMessages.cs b/OpenMetaverse/Messages/LindenMessages.cs index 5fe792d7..9d671dcc 100644 --- a/OpenMetaverse/Messages/LindenMessages.cs +++ b/OpenMetaverse/Messages/LindenMessages.cs @@ -1703,6 +1703,64 @@ namespace OpenMetaverse.Messages.Linden } } + public class AgentStateUpdateMessage : IMessage + { + public OSDMap RawData; + public bool CanModifyNavmesh; + public bool HasModifiedNavmesh; + public string MaxAccess; // PG, M, A + public bool AlterNavmeshObjects; + public bool AlterPermanentObjects; + public int GodLevel; + public string Language; + public bool LanguageIsPublic; + + public void Deserialize(OSDMap map) + { + RawData = map; + CanModifyNavmesh = map["can_modify_navmesh"]; + HasModifiedNavmesh = map["has_modified_navmesh"]; + if (map["preferences"] is OSDMap) + { + var prefs = (OSDMap)map["preferences"]; + AlterNavmeshObjects = prefs["alter_navmesh_objects"]; + AlterPermanentObjects = prefs["alter_permanent_objects"]; + GodLevel = prefs["god_level"]; + Language = prefs["language"]; + LanguageIsPublic = prefs["language_is_public"]; + if (prefs["access_prefs"] is OSDMap) + { + var access = (OSDMap)prefs["access_prefs"]; + MaxAccess = access["max"]; + } + } + } + + public OSDMap Serialize() + { + RawData = new OSDMap(); + RawData["can_modify_navmesh"] = CanModifyNavmesh; + RawData["has_modified_navmesh"] = HasModifiedNavmesh; + + OSDMap prefs = new OSDMap(); + { + OSDMap access = new OSDMap(); + { + access["max"] = MaxAccess; + } + prefs["access_prefs"] = access; + prefs["alter_navmesh_objects"] = AlterNavmeshObjects; + prefs["alter_permanent_objects"] = AlterPermanentObjects; + prefs["god_level"] = GodLevel; + prefs["language"] = Language; + prefs["language_is_public"] = LanguageIsPublic; + } + RawData["preferences"] = prefs; + return RawData; + } + + } + /// Base class for Asset uploads/results via Capabilities public abstract class AssetUploaderBlock { diff --git a/OpenMetaverse/Messages/MessageEventDecoder.cs b/OpenMetaverse/Messages/MessageEventDecoder.cs index cd070f7a..d169a019 100644 --- a/OpenMetaverse/Messages/MessageEventDecoder.cs +++ b/OpenMetaverse/Messages/MessageEventDecoder.cs @@ -84,6 +84,7 @@ namespace OpenMetaverse.Messages case "ScriptRunningReply": message = new ScriptRunningReplyMessage(); break; case "SearchStatRequest": message = new SearchStatRequestMessage(); break; case "AgentDropGroup": message = new AgentDropGroupMessage(); break; + case "AgentStateUpdate": message = new AgentStateUpdateMessage(); break; case "ForceCloseChatterBoxSession": message = new ForceCloseChatterBoxSessionMessage(); break; case "UploadBakedTexture": message = new UploadBakedTextureMessage(); break; case "RegionInfo": message = new RegionInfoMessage(); break;