private string CurtailMessageLength(string message)
{
const int OneHalfK = (int)SI.Kilo / 2;
// Don't curtail unless we are at least 512 characters over message length threshold,
// seems superfluous in warning message to curtail just a handful of characters
if (message.Length > m_maxStatusUpdatesLength + OneHalfK)
{
// 1 2 3 4 5 6 7 8
// 12345678901234567890123456789012345678901234567890123456789012345678901234567890
string warningMessage = $"\r\n...\r\n\r\nMaximum status message size exceeded - suppressed over {(message.Length - m_maxStatusUpdatesLength) / SI.Kilo:N2}K characters.\r\n\r\n...\r\n";
int availableLength = (m_maxStatusUpdatesLength - warningMessage.Length) / 2;
if (availableLength > 0 && message.Length > availableLength)
{
string top = message.Substring(0, availableLength);
string bottom = message.Substring(message.Length - availableLength);
int newLineIndex;
newLineIndex = top.LastIndexOf("\r\n", StringComparison.Ordinal);
if (newLineIndex > 0)
top = top.Substring(0, newLineIndex).TrimEnd('\r', '\n');
newLineIndex = bottom.IndexOf("\r\n", StringComparison.Ordinal);
if (newLineIndex > -1 && newLineIndex + 1 < bottom.Length)
bottom = bottom.Substring(newLineIndex + 1).TrimStart('\r', '\n');
message = $"{top}{warningMessage}{bottom}";
}
}
return message;
}