/// <summary>
 /// Adds a custom message to consider for parsing raw messages recevied from the server.
 /// </summary>
 /// <param name="msg"></param>
 public void AddCustomMessage( IrcMessage msg )
 {
     if ( this.customs == null )
     {
         this.customs = new PrioritizedMessageList();
     }
     customs.AddLast( msg );
 }
        private static IrcMessage GetMessage( String unparsedMessage, PrioritizedMessageList potentialHandlers )
        {
            IrcMessage handler = null;
            LinkedListNode<IrcMessage> nodeToPrioritize = null;

            LinkedListNode<IrcMessage> node = potentialHandlers.First;
            if ( node != null )
            {
                do
                {
                    IrcMessage msg = node.Value;

                    try
                    {
                        if ( msg.CanParse( unparsedMessage ) )
                        {
                            nodeToPrioritize = node;
                            handler = msg.CreateInstance();
                            break;
                        }
                        node = node.Next;
                    }
                    catch
                    {
                        System.Diagnostics.Trace.WriteLine( "Error testing CanParse on { " + unparsedMessage + " }", "Parse Error" );
                        throw;
                    }
                }
                while ( node != null && node.Next != potentialHandlers.First );
            }

            if ( nodeToPrioritize != null )
            {
                potentialHandlers.Prioritize( nodeToPrioritize );
            }

            return handler;
        }