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; }
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; }