From 93bfac58dab3863ea94a159b9f98ea7098173708 Mon Sep 17 00:00:00 2001 From: Cinder Date: Sat, 11 Sep 2021 09:21:35 -0500 Subject: [PATCH] Rather than add a bunch of other events, just extend alert handling --- LibreMetaverse/AgentManager.cs | 39 +++++++++++++------ .../Commands/Movement/FollowCommand.cs | 11 ++++-- 2 files changed, 35 insertions(+), 15 deletions(-) diff --git a/LibreMetaverse/AgentManager.cs b/LibreMetaverse/AgentManager.cs index 95079ea2..e489d26d 100644 --- a/LibreMetaverse/AgentManager.cs +++ b/LibreMetaverse/AgentManager.cs @@ -4691,7 +4691,20 @@ namespace OpenMetaverse AlertMessagePacket alert = (AlertMessagePacket)packet; - OnAlertMessage(new AlertMessageEventArgs(Utils.BytesToString(alert.AlertData.Message))); + string message = Utils.BytesToString(alert.AlertData.Message); + + if (alert.AlertInfo.Length > 0) + { + string notificationid = Utils.BytesToString(alert.AlertInfo[0].Message); + OSD extra = (alert.AlertInfo[0].ExtraParams != null && alert.AlertInfo[0].ExtraParams.Length > 0) + ? OSDParser.Deserialize(alert.AlertInfo[0].ExtraParams) + : null; + OnAlertMessage(new AlertMessageEventArgs(message, notificationid, extra)); + } + else + { + OnAlertMessage(new AlertMessageEventArgs(message, null, null)); + } } protected void AgentAlertMessageHandler(object sender, PacketReceivedEventArgs e) @@ -4700,10 +4713,9 @@ namespace OpenMetaverse Packet packet = e.Packet; AgentAlertMessagePacket alert = (AgentAlertMessagePacket)packet; - // HACK: Agent alerts support modal and Generic Alerts do not, but it's all the same for // my simplified ass right now. - OnAlertMessage(new AlertMessageEventArgs(Utils.BytesToString(alert.AlertData.Message))); + OnAlertMessage(new AlertMessageEventArgs(Utils.BytesToString(alert.AlertData.Message), null, null)); } /// Process an incoming packet and raise the appropriate events @@ -5321,16 +5333,21 @@ namespace OpenMetaverse /// Data sent by the simulator containing urgent messages public class AlertMessageEventArgs : EventArgs { - /// Get the alert message public string Message { get; } + public string NotificationId { get; } + public OSD ExtraParams { get; } - /// - /// Construct a new instance of the AlertMessageEventArgs class - /// - /// The alert message - public AlertMessageEventArgs(string message) - { - Message = message; + /// + /// Construct a new instance of the AlertMessageEventArgs class + /// + /// user readable message + /// notification id for alert, may be null + /// any extra params in OSD format, may be null + public AlertMessageEventArgs(string message, string notificationid, OSD extraparams) + { + Message = message; + NotificationId = notificationid; + ExtraParams = extraparams; } } diff --git a/Programs/examples/TestClient/Commands/Movement/FollowCommand.cs b/Programs/examples/TestClient/Commands/Movement/FollowCommand.cs index fba7fb1c..ba2bab20 100644 --- a/Programs/examples/TestClient/Commands/Movement/FollowCommand.cs +++ b/Programs/examples/TestClient/Commands/Movement/FollowCommand.cs @@ -127,11 +127,14 @@ namespace OpenMetaverse.TestClient Packet packet = e.Packet; AlertMessagePacket alert = (AlertMessagePacket)packet; - string message = Utils.BytesToString(alert.AlertData.Message); - - if (message.Contains("Autopilot cancel")) + if (alert.AlertInfo.Length > 0) { - Logger.Log("FollowCommand: " + message, Helpers.LogLevel.Info, Client); + string id = Utils.BytesToString(alert.AlertInfo[0].Message); + if (id == "AutopilotCancelled") + { + Logger.Log("FollowCommand: " + Utils.BytesToString(alert.AlertData.Message), + Helpers.LogLevel.Info, Client); + } } } }