Send watchdog events in a better fashion

This commit is contained in:
Jordan Brown
2018-08-18 14:57:20 -04:00
parent 1a455cc7d9
commit fbd44f2823
3 changed files with 37 additions and 7 deletions
+9 -1
View File
@@ -141,7 +141,15 @@
return result
if(TGS4_TOPIC_EVENT)
intercepted_message_queue = list()
event_handler.HandleEvent(text2num(params[TGS4_PARAMETER_DATA]))
var/list/event_notification = json_decode(params[TGS4_PARAMETER_DATA])
var/list/event_parameters = event_notification["Parameters"]
var/list/event_call = list(event_notification["Type"])
if(event_parameters)
event_call += event_parameters
event_handler.HandleEvent(arglist(event_call))
. = json_encode(intercepted_message_queue)
intercepted_message_queue = null
return
@@ -0,0 +1,20 @@
using System.Collections.Generic;
namespace Tgstation.Server.Host.Components.Interop
{
/// <summary>
/// For notifying DD of <see cref="EventType"/>s
/// </summary>
sealed class EventNotification
{
/// <summary>
/// The <see cref="EventType"/>
/// </summary>
public EventType Type { get; set; }
/// <summary>
/// The event parameters
/// </summary>
public IEnumerable<string> Parameters { get; set; }
}
}
@@ -801,12 +801,14 @@ namespace Tgstation.Server.Host.Components.Watchdog
return true;
var builder = new StringBuilder(Constants.DMTopicEvent);
if (parameters != null)
foreach (var I in parameters)
{
builder.Append("&");
builder.Append(byondTopicSender.SanitizeString(I));
}
builder.Append("&");
var notification = new EventNotification
{
Type = eventType,
Parameters = parameters
};
var json = JsonConvert.SerializeObject(notification);
builder.Append(byondTopicSender.SanitizeString(json));
var activeServer = AlphaIsActive ? alphaServer : bravoServer;
results = await activeServer.SendCommand(builder.ToString(), cancellationToken).ConfigureAwait(false);