protected void WriteMessage(IrcMessage message)
{
CheckDisposed();
if (message.Command == null)
throw new ArgumentException(Resources.MessageInvalidCommand, "message");
if (message.Parameters.Count > maxParamsCount)
throw new ArgumentException(Resources.MessageTooManyParams, "parameters");
var lineBuilder = new StringBuilder();
// Append prefix to line, if specified.
if (message.Prefix != null)
lineBuilder.Append(":" + CheckPrefix(message.Prefix) + " ");
// Append command name to line.
lineBuilder.Append(CheckCommand(message.Command).ToUpper());
// Append each parameter to line, adding ':' character before last parameter.
for (var i = 0; i < message.Parameters.Count - 1; i++)
{
if (message.Parameters[i] != null)
lineBuilder.Append(" " + CheckMiddleParameter(message.Parameters[i]));
}
if (message.Parameters.Count > 0)
{
var lastParameter = message.Parameters[message.Parameters.Count - 1];
if (lastParameter != null)
lineBuilder.Append(" :" + CheckTrailingParameter(lastParameter));
}
// Send raw message as line of text.
var line = lineBuilder.ToString();
var messageSentEventArgs = new IrcRawMessageEventArgs(message, line);
WriteMessage(line, messageSentEventArgs);
}