IrcDotNet.IrcClient.ParseMessage C# (CSharp) Method

ParseMessage() protected method

protected ParseMessage ( string line ) : void
line string
return void
        protected void ParseMessage(string line)
        {
            string prefix = null;
            string lineAfterPrefix = null;

            // Extract prefix from message line, if it contains one.
            if (line[0] == ':')
            {
                var firstSpaceIndex = line.IndexOf(' ');
                Debug.Assert(firstSpaceIndex != -1);
                prefix = line.Substring(1, firstSpaceIndex - 1);
                lineAfterPrefix = line.Substring(firstSpaceIndex + 1);
            }
            else
            {
                lineAfterPrefix = line;
            }

            // Extract command from message.
            var spaceIndex = lineAfterPrefix.IndexOf(' ');
            Debug.Assert(spaceIndex != -1);
            var command = lineAfterPrefix.Substring(0, spaceIndex);
            var paramsLine = lineAfterPrefix.Substring(command.Length + 1);

            // Extract parameters from message.
            // Each parameter is separated by single space, except last one, which may contain spaces if it
            // is prefixed by colon.
            var parameters = new string[maxParamsCount];
            int paramStartIndex, paramEndIndex = -1;
            var lineColonIndex = paramsLine.IndexOf(" :");
            if (lineColonIndex == -1 && !paramsLine.StartsWith(":"))
                lineColonIndex = paramsLine.Length;
            for (var i = 0; i < parameters.Length; i++)
            {
                paramStartIndex = paramEndIndex + 1;
                paramEndIndex = paramsLine.IndexOf(' ', paramStartIndex);
                if (paramEndIndex == -1)
                    paramEndIndex = paramsLine.Length;
                if (paramEndIndex > lineColonIndex)
                {
                    paramStartIndex++;
                    paramEndIndex = paramsLine.Length;
                }
                parameters[i] = paramsLine.Substring(paramStartIndex, paramEndIndex - paramStartIndex);
                if (paramEndIndex == paramsLine.Length)
                    break;
            }

            // Parse received IRC message.
            var message = new IrcMessage(this, prefix, command, parameters);
            var messageReceivedEventArgs = new IrcRawMessageEventArgs(message, line);
            OnRawMessageReceived(messageReceivedEventArgs);
            ReadMessage(message, line);

            #if DEBUG
            DebugUtilities.WriteIrcRawLine(this, ">>> " + messageReceivedEventArgs.RawContent);
            #endif
        }
IrcClient