public static Reply Decode(string message)
{
var reply = new Reply();
string trailing = string.Empty;
int prefixEnd = -1;
if (message.StartsWith(":"))
{
prefixEnd = message.IndexOf(' ');
reply.Prefix = message.Substring(1, prefixEnd - 1);
}
int trailingStart = message.IndexOf(" :", StringComparison.Ordinal);
if (trailingStart >= 0)
trailing = message.Substring(trailingStart + 2);
else
trailingStart = message.Length;
string[] commandAndParameters = message.Substring(prefixEnd + 1, trailingStart - prefixEnd - 1).Split(' ');
foreach (var param in commandAndParameters)
{
param.Trim();
}
reply.Command = commandAndParameters.First();
if (commandAndParameters.Length > 1)
reply.Params = commandAndParameters.Skip(1).ToList();
reply.Trailing = trailing.Trim();
return reply;
}