private void RenderRCONCommandOutput(ServerRCON.ConsoleCommand command)
        {
            //
            // Format output
            //
            var p = new Paragraph();

            if (!command.suppressCommand)
            {
                foreach (var element in FormatCommandInput(command))
                {
                    p.Inlines.Add(element);
                }
            }

            if (!command.suppressOutput)
            {
                foreach (var element in FormatCommandOutput(command))
                {
                    p.Inlines.Add(element);
                }
            }

            if (!(command.suppressCommand && command.suppressOutput))
            {
                if (p.Inlines.Count > 0)
                {
                    AddBlockContent(p);
                }
            }
        }
        private IEnumerable <Inline> FormatCommandOutput(ServerRCON.ConsoleCommand command)
        {
            bool firstLine = true;

            if (command.command.Equals("listplayers", StringComparison.OrdinalIgnoreCase))
            {
                foreach (var output in command.lines)
                {
                    var trimmed = output.TrimEnd();

                    if (!firstLine)
                    {
                        yield return(new LineBreak());
                    }
                    firstLine = false;

                    if (trimmed == ServerRCON.NoResponseOutput)
                    {
                        yield return(new RCONOutput_NoResponse());
                    }
                    else if (trimmed.EndsWith("joined the game."))
                    {
                        yield return(new RCONOutput_PlayerJoined(trimmed));
                    }
                    else if (trimmed.EndsWith("left the game."))
                    {
                        yield return(new RCONOutput_PlayerLeft(trimmed));
                    }
                    else
                    {
                        yield return(new RCONOutput_CommandOutput(trimmed));
                    }
                }
            }
            else
            {
                foreach (var output in command.lines)
                {
                    var trimmed = output.TrimEnd();

                    if (!firstLine)
                    {
                        yield return(new LineBreak());
                    }
                    firstLine = false;

                    if (trimmed == ServerRCON.NoResponseOutput)
                    {
                        yield return(new RCONOutput_NoResponse());
                    }
                    else
                    {
                        yield return(new RCONOutput_CommandOutput(trimmed));
                    }
                }
            }
        }
        private IEnumerable <Inline> FormatCommandInput(ServerRCON.ConsoleCommand command)
        {
            if (command.command.Equals("broadcast", StringComparison.OrdinalIgnoreCase))
            {
                yield return(new RCONOutput_Broadcast(command.args));
            }
            else
            {
                yield return(new RCONOutput_Command($"> {command.rawCommand}"));
            }

            if (!command.suppressOutput && command.lines.Count() > 0)
            {
                yield return(new LineBreak());
            }
        }
        private IEnumerable <Inline> FormatCommandOutput(ServerRCON.ConsoleCommand command)
        {
            bool firstLine = true;

            foreach (var output in command.lines)
            {
                var trimmed = output.TrimEnd();
                if (!firstLine)
                {
                    yield return(new LineBreak());
                }
                firstLine = false;

                if (output == ServerRCON.NoResponseOutput)
                {
                    yield return(new RCONOutput_NoResponse());
                }
                else
                {
                    yield return(new RCONOutput_CommandOutput(trimmed));
                }
            }
        }