From 649effdcc68ef7cf220f3e2d0b1d3799a9e13b0e Mon Sep 17 00:00:00 2001 From: Cyberboss Date: Fri, 13 Jul 2018 11:14:28 -0400 Subject: [PATCH] Handle chat responses in Watchdog.HandleEvent --- .../Components/Watchdog/Watchdog.cs | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/Tgstation.Server.Host/Components/Watchdog/Watchdog.cs b/src/Tgstation.Server.Host/Components/Watchdog/Watchdog.cs index c5998416ca..8110f17efc 100644 --- a/src/Tgstation.Server.Host/Components/Watchdog/Watchdog.cs +++ b/src/Tgstation.Server.Host/Components/Watchdog/Watchdog.cs @@ -4,6 +4,7 @@ using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Globalization; +using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; @@ -539,6 +540,7 @@ namespace Tgstation.Server.Host.Components.Watchdog /// public async Task HandleEvent(EventType eventType, IEnumerable parameters, CancellationToken cancellationToken) { + string results; using (await SemaphoreSlimContext.Lock(semaphore, cancellationToken).ConfigureAwait(false)) { if (!Running) @@ -552,8 +554,24 @@ namespace Tgstation.Server.Host.Components.Watchdog } var activeServer = AlphaIsActive ? alphaServer : bravoServer; - await activeServer.SendCommand(builder.ToString(), cancellationToken).ConfigureAwait(false); + results = await activeServer.SendCommand(builder.ToString(), cancellationToken).ConfigureAwait(false); } + + if (results == null) + return; + + List responses; + try + { + responses = JsonConvert.DeserializeObject>(results); + } + catch + { + logger.LogInformation("Recieved invalid response from DD when parsing event {0}:{1}{2}", eventType, Environment.NewLine, results); + return; + } + + await Task.WhenAll(responses.Select(x => chat.SendMessage(x.Message, x.ChannelIds, cancellationToken))).ConfigureAwait(false); } } }