コード例 #1
0
 public IrcChannel(IrcSession session, String name, String topic)
 {
     _session = session;
     _factory = _session.MessageFactory;
     Name = name.Split(' ')[0];
     if (topic.Length > 0 && topic[0] == ':')
     {
         topic = topic.Substring(1);
     }
     Topic = topic;
 }
コード例 #2
0
        public static bool TryParse(String message, out IrcMessage output)
        {
            if (!String.IsNullOrEmpty(message))
            {
                var factory = new IrcMessageFactory();

                String prefix = GetMessagePrefix(message);
                String msgWithoutPrefix = GetMessageWithoutPrefix(prefix, message);

                String type = GetMessageType(msgWithoutPrefix);
                String msgArguments = GetMessageArguments(msgWithoutPrefix, type);
                String[] arguments = ParseArguments(msgArguments);

                if (type.Equals(IrcDefinition.Request.Ping, StringComparison.Ordinal))
                {
                    if (!String.IsNullOrEmpty(arguments[0]))
                    {
                        output = factory.Ping(arguments[0]);
                        return true;
                    }
                }
                else if (type.Equals(IrcDefinition.Response.ErrorNotRegistred, StringComparison.Ordinal))
                {
                    if (!String.IsNullOrEmpty(arguments[0]) && !String.IsNullOrEmpty(arguments[1]))
                    {
                        output = factory.NotRegistred(prefix, arguments[0], arguments[1]);
                        return true;
                    }
                    else if (!String.IsNullOrEmpty(arguments[0]))
                    {
                        output = factory.NotRegistred(prefix, arguments[0]);
                        return true;
                    }
                }
                else if (type.Equals(IrcDefinition.Response.ErrorAlreadyRegistred, StringComparison.Ordinal))
                {
                    if (!String.IsNullOrEmpty(arguments[1]))
                    {
                        output = factory.AlreadyRegistred(prefix, arguments[1]);
                        return true;
                    }
                }
                else if (type.Equals(IrcDefinition.Response.ErrorNeedMoreParams, StringComparison.Ordinal))
                {
                    if (!String.IsNullOrEmpty(arguments[0]) && !String.IsNullOrEmpty(arguments[1]))
                    {
                        output = factory.NeedMoreParams(prefix, arguments[0], arguments[1]);
                        return true;
                    }
                }
                else if (type.Equals(IrcDefinition.Response.ErrorNoNicknameGiven, StringComparison.Ordinal))
                {
                    if (!String.IsNullOrEmpty(arguments[0]))
                    {
                        output = factory.NoNickNameGiven(prefix, arguments[0]);
                        return true;
                    }
                }
                else if (type.Equals(IrcDefinition.Response.ErrorErrorneusNickname, StringComparison.Ordinal))
                {
                    if (!String.IsNullOrEmpty(arguments[0]) && !String.IsNullOrEmpty(arguments[1]))
                    {
                        output = factory.ErrorneusNickname(prefix, arguments[0], arguments[1]);
                        return true;
                    }
                }
                else if (type.Equals(IrcDefinition.Response.ErrorNicknameInUse, StringComparison.Ordinal))
                {
                    if (!String.IsNullOrEmpty(arguments[0]) && !String.IsNullOrEmpty(arguments[1]))
                    {
                        output = factory.NicknameInUse(prefix, arguments[0], arguments[1]);
                        return true;
                    }
                }
                else if (type.Equals(IrcDefinition.Response.ErrorNicknameCollision, StringComparison.Ordinal))
                {
                    if (!String.IsNullOrEmpty(arguments[0]) && !String.IsNullOrEmpty(arguments[1]))
                    {
                        output = factory.NicknameCollision(prefix, arguments[0], arguments[1]);
                        return true;
                    }
                }
                else if (type.Equals(IrcDefinition.Response.ListStart, StringComparison.Ordinal))
                {
                    if (!String.IsNullOrEmpty(arguments[0]))
                    {
                        output = factory.ListStart(prefix, arguments[0]);
                        return true;
                    }
                }
                else if (type.Equals(IrcDefinition.Response.ListEnd, StringComparison.Ordinal))
                {
                    if (!String.IsNullOrEmpty(arguments[0]))
                    {
                        output = factory.ListEnd(prefix, arguments[0]);
                        return true;
                    }
                }
                else if (type.Equals(IrcDefinition.Response.List, StringComparison.Ordinal))
                {
                    if (arguments.Length > 1)
                    {
                        var nick = arguments[0];
                        var channel = (arguments.Length > 1 && !String.IsNullOrEmpty(arguments[1])) ? arguments[1] : String.Empty;
                        var visibility = (arguments.Length > 2 && !String.IsNullOrEmpty(arguments[2])) ? arguments[2] : String.Empty;
                        var topic = (arguments.Length > 3 && !String.IsNullOrEmpty(arguments[3])) ? arguments[3] : String.Empty;
                        output = factory.List(prefix, nick, channel, visibility, topic);
                        return true;
                    }
                }
                else if (type.Equals(IrcDefinition.Response.EndOfNames, StringComparison.Ordinal))
                {
                    if (!String.IsNullOrEmpty(arguments[0]) && !String.IsNullOrEmpty(arguments[1]) && !String.IsNullOrEmpty(arguments[2]))
                    {
                        output = factory.EndOfNames(prefix, arguments[0], arguments[1], arguments[2]);
                        return true;
                    }
                }
                else if (type.Equals(IrcDefinition.Response.NoTopic, StringComparison.Ordinal))
                {
                    if (!String.IsNullOrEmpty(arguments[0]) && !String.IsNullOrEmpty(arguments[1]))
                    {
                        output = factory.NoTopic(prefix, arguments[0], arguments[1]);
                        return true;
                    }
                }
                else if (type.Equals(IrcDefinition.Response.Topic, StringComparison.Ordinal))
                {
                    if (!String.IsNullOrEmpty(arguments[0]) && !String.IsNullOrEmpty(arguments[1]) && !String.IsNullOrEmpty(arguments[2]))
                    {
                        output = factory.Topic(prefix, arguments[0], arguments[1], arguments[2]);
                        return true;
                    }
                }
                else if (type.Equals(IrcDefinition.Response.NameReply, StringComparison.Ordinal))
                {
                    if (!String.IsNullOrEmpty(arguments[0]) && !String.IsNullOrEmpty(arguments[1]) && !String.IsNullOrEmpty(arguments[2]))
                    {
                        output = factory.NameReply(prefix, arguments[0], arguments[2], arguments[3].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries));
                        return true;
                    }
                }
                else if (type.Equals(IrcDefinition.Response.ChannelCreation, StringComparison.Ordinal))
                {
                    if (!String.IsNullOrEmpty(arguments[0]) && !String.IsNullOrEmpty(arguments[1]) && !String.IsNullOrEmpty(arguments[2]))
                    {
                        output = factory.ChannelCreation(prefix, arguments[0], arguments[1], arguments[2], (arguments.Length > 3) ? arguments[3] : String.Empty);
                        return true;
                    }
                }
                else if (type.Equals(IrcDefinition.Response.ErrorNoSuchChannel, StringComparison.Ordinal))
                {
                    if (!String.IsNullOrEmpty(arguments[0]) && !String.IsNullOrEmpty(arguments[1]))
                    {
                        output = factory.NoSuchChannel(prefix, arguments[0], arguments[1], (arguments.Length > 2) ? arguments[2] : String.Empty);
                        return true;
                    }
                }
                else if (type.Equals(IrcDefinition.Response.ErrorTooManyChannels, StringComparison.Ordinal))
                {
                    if (!String.IsNullOrEmpty(arguments[0]) && !String.IsNullOrEmpty(arguments[1]))
                    {
                        output = factory.TooManyChannels(prefix, arguments[0], arguments[1], (arguments.Length > 2) ? arguments[2] : String.Empty);
                        return true;
                    }
                }
                else if (type.Equals(IrcDefinition.Response.ErrorBannedFromChannel, StringComparison.Ordinal))
                {
                    if (!String.IsNullOrEmpty(arguments[0]) && !String.IsNullOrEmpty(arguments[1]))
                    {
                        output = factory.BannedFromChannel(prefix, arguments[0], arguments[1], (arguments.Length > 2) ? arguments[2] : String.Empty);
                        return true;
                    }
                }
                else if (type.Equals(IrcDefinition.Response.ErrorInviteOnlyChannel, StringComparison.Ordinal))
                {
                    if (!String.IsNullOrEmpty(arguments[0]) && !String.IsNullOrEmpty(arguments[1]))
                    {
                        output = factory.InviteOnlyChannel(prefix, arguments[0], arguments[1], (arguments.Length > 2) ? arguments[2] : String.Empty);
                        return true;
                    }
                }
                else if (type.Equals(IrcDefinition.Response.ErrorChannelIsFull, StringComparison.Ordinal))
                {
                    if (!String.IsNullOrEmpty(arguments[0]) && !String.IsNullOrEmpty(arguments[1]))
                    {
                        output = factory.ChannelIsFull(prefix, arguments[0], arguments[1], (arguments.Length > 2) ? arguments[2] : String.Empty);
                        return true;
                    }
                }
                else if (type.Equals(IrcDefinition.Response.ErrorBadChannelKey, StringComparison.Ordinal))
                {
                    if (!String.IsNullOrEmpty(arguments[0]) && !String.IsNullOrEmpty(arguments[1]))
                    {
                        output = factory.BadChannelKey(prefix, arguments[0], arguments[1], (arguments.Length > 2) ? arguments[2] : String.Empty);
                        return true;
                    }
                }
                else if (type.Equals(IrcDefinition.Request.Topic, StringComparison.Ordinal))
                {
                    if (!String.IsNullOrEmpty(arguments[0]))
                    {
                        output = factory.Topic(prefix, arguments[0], (arguments.Length > 1) ? arguments[1] : String.Empty);
                        return true;
                    }
                }
                else if (type.Equals(IrcDefinition.Request.Mode, StringComparison.Ordinal))
                {
                    if (!String.IsNullOrEmpty(arguments[0]) && !String.IsNullOrEmpty(arguments[1]))
                    {
                        if (arguments.Length == 2)
                        {
                            output = factory.Mode(prefix, arguments[0], arguments[1]);
                            return true;
                        }
                        else if (arguments.Length > 2)
                        {
                            output = factory.Mode(prefix, arguments[0], arguments[1], arguments[2]);
                            return true;
                        }
                    }
                }
                else if (type.Equals(IrcDefinition.Request.PrivateMessage, StringComparison.Ordinal))
                {
                    if (!String.IsNullOrEmpty(arguments[0]) && !String.IsNullOrEmpty(arguments[1]))
                    {
                        output = factory.PrivateMessage(prefix, arguments[0], arguments[1]);
                        return true;
                    }
                }
                else if (type.Equals(IrcDefinition.Request.Nick, StringComparison.Ordinal))
                {
                    if (!String.IsNullOrEmpty(arguments[0]))
                    {
                        output = factory.SetNick(arguments[0]);
                        return true;
                    }
                }
                else
                {
                    output = new IrcMessage(type, prefix, arguments);
                    return true;
                }
            }

            output = new IrcMessage();
            return false;
        }